GIS 1 — Dữ liệu không gian & GIS: Tổng quan

13 thg 7, 2026 4 lượt xem
#spatial
#location
#geospatial
#postgis
#gis

GIS 1 — Dữ liệu không gian & GIS: Tổng quan

Mỗi khách hàng của NCB đều ở một nơi nào đó. Mỗi chi nhánh, mỗi cây ATM, mỗi POS, mỗi giao dịch thẻ đều gắn với một điểm trên bản đồ. Khi bạn hỏi những câu rất đời thường của nghiệp vụ ngân hàng — "khách hàng của mình phân bố ở đâu?", "nên đặt ATM mới chỗ nào?", "giao dịch này có bất thường về địa lý không?" — thì thứ dữ liệu bạn cần không còn là con số hay chuỗi thuần tuý, mà là dữ liệu không gian.

Bài này mở đầu series Dữ liệu không gian & GIS. Mục tiêu không phải dạy bạn viết ngay truy vấn không gian phức tạp, mà dựng một mô hình tinh thần đúng: dữ liệu không gian là gì, biểu diễn ra sao, hệ toạ độ hoạt động thế nào, và vì sao nó đáng để một team dữ liệu ngân hàng đầu tư. Có nền đó rồi, các bài sau — PostGIS, Truy vấn không gian, Định dạng dữ liệu, Trực quan hoá, Phân tích — sẽ ăn khớp thay vì rời rạc.

Lưu ý về sandbox: SQL sandbox của Knowledge Base chạy trên PostgreSQL thuần, KHÔNG cài PostGIS. Vì vậy mọi truy vấn không gian (dùng geometry, ST_*...) trong series này không chạy được ở đây — chỉ mang tính minh hoạ. Ngược lại, các truy vấn tổng hợp "thô" theo cột city của bảng customers thì chạy được, và ta sẽ dùng chúng như một dạng phân tích theo địa bàn cấp thô.

Dữ liệu không gian là gì

Dữ liệu không gian (spatial data), hay dữ liệu địa không gian (geospatial data — khi vị trí gắn với bề mặt Trái Đất), là dữ liệu mô tả vị trí và hình dạng của đối tượng trong không gian. Khác với một con số như balance = 12000000 không có "chỗ đứng" trên bản đồ, một bản ghi không gian trả lời được câu hỏi "ở đâu?": chi nhánh này nằm tại toạ độ nào, quận này có ranh giới ra sao, tuyến sông chảy qua những điểm nào.

Một bản ghi không gian thường gồm hai phần:

  • Thành phần hình học (geometry): mô tả vị trí và hình dạng — một điểm, một đường, hay một vùng, biểu diễn bằng toạ độ.
  • Thuộc tính (attributes): dữ liệu phi không gian đi kèm — tên chi nhánh, số máy ATM, dân số của quận, doanh số POS. Đây chính là các cột "bình thường" mà bạn đã quen.

Nói cách khác, dữ liệu không gian = dữ liệu bảng quen thuộc + một cột hình học đặc biệt cho biết đối tượng nằm ở đâu. Chính cột hình học đó mở ra cả một lớp câu hỏi mới mà SQL thông thường không trả lời được: khoảng cách, vùng phủ, giao cắt, "gần nhất", "nằm trong".

Vì sao ngân hàng cần đến nó

GIS thường bị hình dung là chuyện của ngành bản đồ hay quy hoạch đô thị. Thực tế nó gắn rất chặt với bài toán ngân hàng:

Bài toán nghiệp vụVai trò của dữ liệu không gian
Mạng lưới chi nhánh & ATMĐặt điểm mới ở đâu để phủ tối đa khách hàng, tránh chồng lấn; đo bán kính phục vụ; tìm "vùng trắng" chưa có điểm giao dịch.
Phân tích khách hàng theo địa bànGom nhóm khách theo tỉnh/quận/phường; tính mật độ khách trên bản đồ; so sánh dư nợ, huy động giữa các khu vực.
Chấm điểm rủi ro theo khu vựcGắn hồ sơ tín dụng với đặc điểm địa bàn (thu nhập vùng, ngập lụt, giá đất) để bổ trợ scorecard.
Chống gian lận theo vị tríPhát hiện giao dịch "bất khả thi về địa lý" — hai lần quẹt thẻ ở hai tỉnh cách nhau 500 km trong 10 phút; hỗ trợ giám sát giao dịch AML.
Tuân thủ & báo cáoThống kê mạng lưới, độ phủ dịch vụ theo địa giới hành chính phục vụ báo cáo nội bộ và NHNN.

Điểm chung: tất cả đều cần trả lời câu hỏi "ở đâu""gần/xa/trong/ngoài" — đúng thứ mà dữ liệu phi không gian bó tay.

Các loại hình học: điểm, đường, vùng

Gần như mọi đối tượng địa lý đều quy về ba dạng hình học cơ bản (và các biến thể "multi" của chúng):

  • Điểm (Point): một vị trí đơn, biểu diễn bằng một cặp toạ độ. Đây là dạng phổ biến nhất trong ngân hàng: mỗi ATM, chi nhánh, máy POS, địa chỉ khách hàng đều là một điểm.
  • Đường (LineString): một chuỗi điểm nối lại thành đường. Dùng cho tuyến đường, sông, ranh giới tuyến, đường ống. Với ngân hàng ít gặp trực tiếp, nhưng cần khi tính "khoảng cách đi đường thực tế" tới chi nhánh gần nhất.
  • Vùng (Polygon): một đường khép kín bao quanh một diện tích. Dùng cho ranh giới quận/huyện/tỉnh, vùng phủ dịch vụ, khu vực bán kính phục vụ của một cụm ATM. Đây là dạng cho phép trả lời "khách hàng này thuộc quận nào", "vùng nào chưa được phủ".

Ngoài ba dạng đơn còn có MultiPoint / MultiLineString / MultiPolygon (một đối tượng gồm nhiều mảnh rời — ví dụ một tỉnh gồm nhiều đảo là một MultiPolygon).

Hệ toạ độ và CRS/SRID

Đây là khái niệm nền tảng nhất và cũng dễ sai nhất khi mới làm GIS. Một cặp số như (105.85, 21.03) tự nó vô nghĩa nếu không biết nó được đo trong hệ nào. Hệ đó gọi là CRS — Coordinate Reference System (hệ toạ độ tham chiếu), cho biết cách gắn các con số toạ độ vào một vị trí thật trên Trái Đất.

Mỗi CRS thường được định danh bằng một mã SRID (Spatial Reference Identifier), thường trùng với mã trong danh mục EPSG. Hai CRS quan trọng nhất cần nhớ:

  • WGS84 — EPSG:4326: hệ toạ độ kinh độ/vĩ độ (longitude/latitude) mà GPS và Google Maps dùng. Toạ độ tính bằng độ. Ví dụ Hồ Gươm ~ (lon 105.852, lat 21.029). Đây là hệ "chuẩn trao đổi" — hầu hết dữ liệu bạn nhận về (GeoJSON, GPS) đều ở 4326. Cạm bẫy: khoảng cách giữa hai điểm theo độ không phải là mét, và không đo được trực tiếp bằng hình học phẳng vì 1 độ kinh độ ở xích đạo dài hơn ở vĩ độ cao.
  • Hệ chiếu phẳng (projected CRS): "trải" mặt cầu Trái Đất thành mặt phẳng để đo khoảng cách/diện tích bằng mét. Với Việt Nam thường dùng các hệ UTM hoặc VN-2000 — ví dụ EPSG:3405 (VN-2000 / UTM zone 48N) phủ phần lớn lãnh thổ. Trên hệ phẳng, phép Pythagore mới cho ra mét đúng (trong phạm vi vùng).

Ghi nhớ nguyên tắc: lưu trữ & trao đổi ở 4326 (đơn giản, phổ biến), nhưng khi cần đo khoảng cách/diện tích chính xác thì hoặc chuyển sang hệ chiếu phẳng phù hợp, hoặc dùng kiểu geography (xem dưới).

geometry vs geography

Trong PostGIS (và nhiều hệ GIS) có hai kiểu dữ liệu dễ nhầm:

  • geometry: coi toạ độ như trên mặt phẳng Đề-các. Tính nhanh, nhiều hàm, nhưng nếu dữ liệu ở 4326 (độ) thì phép đo khoảng cách trả về độ, không phải mét — dễ sai nếu không chuyển hệ.
  • geography: coi toạ độ như trên mặt cầu Trái Đất. Đo khoảng cách ra mét ngay cả khi để ở 4326, đúng cho phạm vi rộng, nhưng chậm hơn và ít hàm hơn.

Quy tắc thực dụng: vị trí điểm (ATM, khách) trên cả nước, cần mét mà không muốn lo hệ chiếu → dùng geography; phân tích cục bộ nặng, nhiều phép hình học → dùng geometry ở hệ chiếu phẳng phù hợp.

Vector vs Raster

Có hai mô hình biểu diễn thế giới không gian:

  • Vector (véc-tơ): mô tả đối tượng rời rạc bằng toạ độ — điểm/đường/vùng như trên. Sắc nét, gọn, giữ được thuộc tính từng đối tượng, phóng to không vỡ. Phù hợp cho ATM, chi nhánh, ranh giới hành chính — tức 99% dữ liệu ngân hàng.
  • Raster (lưới ô): chia không gian thành một lưới ô vuông (pixel), mỗi ô mang một giá trị. Phù hợp cho hiện tượng liên tục: ảnh vệ tinh, độ cao địa hình, mật độ dân số, bản đồ ngập lụt, "nhiệt" mật độ khách hàng.

Trong stack ngân hàng, vector là chủ đạo; raster xuất hiện khi cần dữ liệu bối cảnh bên ngoài (dân số, thu nhập vùng, rủi ro thiên tai) để làm giàu cho chấm điểm rủi ro theo khu vực. Bài phân tích sẽ đi sâu hơn.

Quan hệ và phép đo không gian

Sức mạnh thật sự của GIS nằm ở chỗ nó cho phép hỏi những câu quan hệ giữa các hình học — thứ SQL thường không làm được.

Quan hệ không gian (spatial relationships) — trả về đúng/sai:

  • Chứa / nằm trong (contains / within): điểm khách hàng có nằm trong vùng quận X không?
  • Giao nhau (intersects): vùng phủ ATM của cụm A có chồng lấn cụm B không?
  • Gần / trong bán kính (dwithin): có ATM nào trong bán kính 2 km quanh điểm này không?
  • Chạm, kề (touches, overlaps): hai quận có chung ranh giới không?

Phép đo (measurements) — trả về số:

  • Khoảng cách (distance): từ khách đến chi nhánh gần nhất bao nhiêu mét?
  • Diện tích (area): vùng phủ dịch vụ rộng bao nhiêu km²?
  • Vùng đệm (buffer): dựng một vùng bao quanh một điểm/đường theo bán kính cho trước — ví dụ "vùng phục vụ 3 km quanh mỗi chi nhánh" — rồi đếm khách rơi vào đó.

Ví dụ minh hoạ (PostGIS — không chạy trong sandbox vì thiếu extension), đếm khách trong bán kính 3 km quanh một chi nhánh:

-- (minh hoạ — PostGIS, KHÔNG chạy trong sandbox Postgres)
SELECT COUNT(*)
FROM customer_points c
WHERE ST_DWithin(
        c.geom::geography,
        ST_SetSRID(ST_MakePoint(105.852, 21.029), 4326)::geography,
        3000   -- 3 km, đơn vị mét vì ép sang geography
      );

Cú pháp và các hàm ST_* này thuộc về PostGIS — ta chỉ nhắc để bạn cảm nhận "vị" của truy vấn không gian.

Phân tích theo địa bàn cấp thô — chạy được trong sandbox

Khi chưa có hạ tầng không gian, bạn vẫn làm được một dạng phân tích theo địa bàn cấp thô bằng cột văn bản city — không cần toạ độ, chỉ gom nhóm theo tên tỉnh/thành. Đây là "phiên bản nghèo" của phân tích không gian, và nó chạy được trong sandbox Postgres:

-- ▶ Chạy được
SELECT city, COUNT(*) AS so_khach
FROM customers
GROUP BY city
ORDER BY so_khach DESC;

Truy vấn này trả lời "khách hàng NCB tập trung ở tỉnh/thành nào nhiều nhất" — hữu ích để ưu tiên mở rộng mạng lưới. Hạn chế của cách làm này so với GIS thật: nó không biết khoảng cách, không biết ranh giới, không đo được vùng phủ, và phụ thuộc chất lượng chuẩn hoá tên thành phố ("Hà Nội" vs "HN" vs "Ha Noi"). GIS đúng nghĩa thay chuỗi city bằng một điểm toạ độ, mở ra mọi phép đo và quan hệ ở trên. Chất lượng chuẩn hoá này chính là bài toán data quality.

Hệ sinh thái GIS

Một stack GIS điển hình gồm các mảnh sau, và phần lớn là mã nguồn mở:

  • Cơ sở dữ liệu không gian — PostGIS: extension biến PostgreSQL thành một CSDL không gian đầy đủ, thêm kiểu geometry/geography và hàng trăm hàm ST_*. Vì là extension của Postgres, nó cài đặt và vận hành theo đúng cơ chế extension chung (xem PostgreSQL extensions) và kế thừa toàn bộ kiến trúc Postgres — cùng một database vừa lưu dữ liệu nghiệp vụ vừa lưu dữ liệu không gian. Đây là trung tâm của series: GIS 2 — PostGIS.
  • Công cụ desktop — QGIS: phần mềm GIS mã nguồn mở để xem, biên tập, phân tích và làm bản đồ trực quan; kết nối thẳng vào PostGIS. Là "bàn làm việc" của người phân tích không gian.
  • Định dạng dữ liệu: dữ liệu không gian được trao đổi qua các định dạng chuẩn — GeoJSON (JSON có toạ độ, hợp cho web/API), Shapefile (định dạng vector kinh điển của ESRI), GeoPackage, WKT/WKB. GIS 4 — Định dạng dữ liệu đi sâu phần này.
  • Bản đồ nền (basemap) & thư viện hiển thị: các lớp bản đồ nền (OpenStreetMap...) và thư viện web (Leaflet, Mapbox) để vẽ dữ liệu lên bản đồ tương tác — chủ đề của GIS 5 — Trực quan hoá.

GIS trong stack dữ liệu ngân hàng

Ghép lại, dữ liệu không gian không tách rời khỏi hạ tầng dữ liệu hiện có mà cắm thẳng vào:

Dữ liệu vị trí được nạp và chuẩn hoá về một CRS thống nhất, lưu trong Postgres/PostGIS ngay cạnh bảng nghiệp vụ, phân tích bằng truy vấn không gian, rồi trực quan trên bản đồ cho người ra quyết định. Không cần một hệ thống tách rời — đây là lợi thế lớn khi team đã dùng PostgreSQL.

Lộ trình series

Series này đi từ nền tảng đến ứng dụng ngân hàng:

  1. GIS 1 — Tổng quan (bài này): khái niệm, hình học, CRS, hệ sinh thái.
  2. GIS 2 — PostGIS: CSDL không gian, kiểu dữ liệu, hàm ST_*, chỉ mục GiST.
  3. GIS 3 — Truy vấn không gian: join không gian, "gần nhất", chứa/giao/buffer.
  4. GIS 4 — Định dạng dữ liệu: GeoJSON, Shapefile, nạp/xuất, chuyển CRS.
  5. GIS 5 — Trực quan hoá: bản đồ nền, Leaflet/Mapbox, dashboard địa lý.
  6. GIS 6 — Phân tích: gom cụm, mật độ, làm giàu rủi ro theo khu vực.
  7. GIS 7 — Big data & cloud: GIS ở quy mô lớn, dịch vụ đám mây.
  8. GIS 8 — Ứng dụng ngân hàng: tổng hợp các bài toán NCB.

Use case thực tế

Bối cảnh: NCB muốn quyết định đặt 5 cây ATM mới trong năm tới, ngân sách hạn chế, cần đặt nơi phục vụ được nhiều khách hàng hiện hữu nhất mà chưa bị điểm giao dịch cũ phủ. Đây là bài toán không gian điển hình.

Bước 1 — Nhìn thô bằng dữ liệu sẵn có (chạy được ngay). Trước khi có toạ độ, dùng cột city để xác định tỉnh/thành nào đông khách nhất — khoanh vùng ưu tiên:

-- ▶ Chạy được
SELECT city, COUNT(*) AS so_khach
FROM customers
GROUP BY city
HAVING COUNT(*) >= 50
ORDER BY so_khach DESC;

Giả sử kết quả cho thấy top khu vực là Hà Nội, TP.HCM, Đà Nẵng, Hải Phòng, Cần Thơ. Đây mới là mức tỉnh — quá thô để chọn vị trí cụ thể.

Bước 2 — Nâng cấp lên không gian. Chuyển địa chỉ khách thành điểm toạ độ (geocoding), lưu vào PostGIS ở EPSG:4326. Với mỗi ATM/chi nhánh hiện có, dựng vùng đệm 2 km (buffer). Khách nằm ngoài mọi vùng đệm là "khách chưa được phủ".

Bước 3 — Tìm điểm đặt tối ưu. Trong tập khách chưa được phủ, gom cụm theo mật độ (GIS 6); tâm của 5 cụm đông nhất là 5 vị trí ứng viên, xếp hạng bằng số khách trong bán kính 2 km quanh mỗi điểm.

Kết quả minh hoạ: thay vì "đặt thêm ATM ở Hà Nội" (mơ hồ), team đưa ra 5 toạ độ cụ thể kèm con số "phủ thêm ~X khách chưa được phục vụ" — đề xuất định lượng, bảo vệ được trước hội đồng đầu tư. Bước 1 chạy được ngay hôm nay; bước 2–3 là đích đến sau khi dựng PostGIS.

Ghi nhớ

  • Dữ liệu không gian = dữ liệu bảng quen thuộc + một cột hình học cho biết đối tượng "ở đâu"; nó trả lời được các câu hỏi vị trí/khoảng cách/vùng phủ mà SQL thường bó tay.
  • Ba dạng hình học cốt lõi: Point (ATM/chi nhánh/khách), LineString (đường/sông), Polygon (quận/tỉnh/vùng phủ), cùng các biến thể Multi.
  • CRS/SRID quyết định ý nghĩa của toạ độ. Nhớ hai hệ: WGS84 / EPSG:4326 (lon-lat, độ, để lưu & trao đổi) và hệ chiếu phẳng UTM/VN-2000 như EPSG:3405 (mét, để đo chính xác).
  • geometry (mặt phẳng, nhanh, cẩn thận đơn vị) vs geography (mặt cầu, ra mét ngay ở 4326, chậm hơn).
  • Vector (điểm/đường/vùng — chủ đạo trong ngân hàng) vs Raster (lưới ô — dân số, ngập lụt, làm giàu rủi ro).
  • Hai nhóm phép cốt lõi: quan hệ (contains/within/intersects/dwithin) và đo lường (distance/area/buffer).
  • Hệ sinh thái: PostGIS (CSDL không gian, là extension của Postgres — xem pg-06-extensions), QGIS, định dạng GeoJSON/Shapefile, bản đồ nền. GIS cắm thẳng vào stack Postgres sẵn có.
  • Trong sandbox: truy vấn không gian không chạy (thiếu PostGIS); nhưng gom nhóm theo city trên customers chạy được như phân tích theo địa bàn cấp thô — bước khởi đầu trước khi có toạ độ thật.

Bài viết liên quan

Các kỹ thuật phân tích không gian tạo giá trị kinh doanh cho ngân hàng: phân tích mật độ & hotspot, gom cụm ST_ClusterDBSCAN/KMeans, tự tương quan không gian (Moran's I), chọn địa điểm ATM/chi nhánh bằng service area, isochrone và overlay đa lớp. Nối tiếp bài truy vấn không gian, minh hoạ bằng SQL PostGIS và quy trình site selection.

13 thg 7, 2026 4

Biến dữ liệu không gian thành bản đồ để ra quyết định. Bản đồ chuyên đề: choropleth (phải chuẩn hoá), symbol/bubble, heatmap, cluster, flow map — chọn theo dữ liệu. Công cụ: QGIS, Leaflet/Mapbox GL/deck.gl/Kepler.gl, bản đồ trong Power BI & Superset; tile OSM, level of detail. Luồng PostGIS → GeoJSON (ST_AsGeoJSON) → web map, nguyên tắc thiết kế và cạm bẫy. Bối cảnh NCB: dashboard dư nợ/huy động/khách theo tỉnh cho lãnh đạo.

13 thg 7, 2026 3

PostGIS biến PostgreSQL thành cơ sở dữ liệu không gian đầy đủ. Bài này đi từ cài đặt CREATE EXTENSION, kiểu geometry vs geography, SRID/EPSG:4326, cách nhập điểm bằng ST_MakePoint/ST_GeomFromText, các hàm cốt lõi (ST_Distance, ST_DWithin, ST_Contains, ST_Buffer, ST_Transform...), chỉ mục GIST bắt buộc cho hiệu năng, tới bài toán tìm ATM/chi nhánh trong bán kính quanh khách hàng NCB.

13 thg 7, 2026 3

Khi dữ liệu không gian vượt sức một Postgres/PostGIS: tỉ điểm GPS, giao dịch có toạ độ, ảnh vệ tinh. GIS trên warehouse đám mây (BigQuery GIS, Snowflake, Redshift), Spark + Apache Sedona, lưới phân cấp Uber H3 / Google S2 / geohash biến spatial join thành group-by, định dạng cloud-native (GeoParquet, COG) và đánh đổi PostGIS vs warehouse/Spark. Bối cảnh NCB: gom hàng trăm triệu giao dịch thẻ theo ô H3.

13 thg 7, 2026 3