Cập nhật lần cuối: 2026-11-04

GeoParquet vs. GeoJSON: Which GIS Format Is Best for Large Datasets?

GeoParquet vs. GeoJSON: Định dạng GIS nào tốt hơn cho bộ dữ liệu lớn?

Nếu bạn từng cố gắng mở một tệp GeoJSON 2 GB trong QGIS hoặc tải một tệp ranh giới đa giác hàng triệu dòng vào bản đồ tương tác, bạn đã biết cảm giác màn hình đóng băng và sự cố hết bộ nhớ.

Trong hơn một thập kỷ, GeoJSON đã đóng vai trò là ngôn ngữ chung toàn cầu của bản đồ web. Nó minh bạch, dễ đọc cho con người, và được hỗ trợ ngay từ đầu bởi hầu hết mọi thư viện bản đồ web và REST API trên internet.

Tuy nhiên, quy trình GIS hiện đại trông hoàn toàn khác so với năm 2008. Các chuyên gia địa không gian ngày nay thường xuyên nhập hàng gigabyte (hoặc terabyte) dữ liệu đo lường di động IoT, bản đồ các tòa nhà trên toàn quốc, mặt nạ phân đoạn lấy từ vệ tinh, và lưới khí hậu tần suất cao.

Khi áp dụng cho các bộ dữ liệu ở quy mô này, GeoJSON không chỉ chậm lại—mà còn gây tắc nghẽn hoàn toàn cho kiến trúc dữ liệu.

Giới thiệu GeoParquet, một phần mở rộng địa không gian mở, tiêu chuẩn cho Apache Parquet đang được ươm tạo trong Tổ chức Địa không gian Mở (OGC).

Trong hướng dẫn toàn diện này, chúng tôi so sánh GeoParquet và GeoJSON về kiến trúc, hiệu quả lưu trữ, thông lượng đọc/ghi, khả năng sẵn sàng cho đám mây và tính tiện dụng cho nhà phát triển để trả lời một câu hỏi quan trọng: Bạn nên chọn định dạng nào cho các bộ dữ liệu lớn?


1. Kiến trúc cấu trúc: Văn bản so với Cột nhị phân

Để hiểu tại sao các định dạng này lại hoạt động khác nhau đáng kể khi quy mô lớn, bạn cần xem xét sâu bên trong cách mỗi định dạng biểu diễn giá trị tọa độ và siêu dữ liệu dạng bảng.

+--------------------------------------------------------------+
| Chỉ số Đánh giá |
| **Định dạng dữ liệu** |
| **Biểu diễn hình học** |
| **Tỷ lệ nén** |
| **Chiếu cột** |
+--------------------------------------------------------------+
                               VS
+--------------------------------------------------------------+
| **Đẩy xuống phép toán không gian** |
| **Lưu trữ đối tượng đám mây (S3/GCS)** |
| **Độ dễ đọc cho con người** |
| **Hỗ trợ Trình duyệt Web** |
| **Cơ quan tiêu chuẩn hoá** |
+--------------------------------------------------------------+

GeoJSON: Dữ liệu dạng hàng, JSON được mã hoá dạng văn bản

GeoJSON biểu diễn dữ liệu dưới dạng một mảng các đối tượng JSON. Mỗi tính năng riêng lẻ lặp lại rõ ràng các khóa thuộc tính cùng với một mảng các số thực được mã hoá dưới dạng chuỗi:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": { "county": "Travis", "state": "TX", "pop_density": 1845.2 },
      "geometry": {
        "type": "Point",
        "coordinates": [-97.74306, 30.26715]
      }
    }
  ]
}

Vì GeoJSON dựa trên văn bản:

  • Lược đồ lặp lại: Các tên trường như \"properties\", \"type\" và \"coordinates\" được lặp lại hàng triệu lần, làm tăng kích thước tệp thô.
  • Chuyển đổi chuỗi sang số thực tốn kém: CPU của bạn phải phân tích các ký tự văn bản (\"-\", \"9\", \"7\", \".\", \"7\"...) thành các số thực đôi 64-bit IEEE trước khi thực hiện bất kỳ thao tác không gian nào.
  • Yêu cầu đọc đơn khối: Các bộ phân tích JSON tiêu chuẩn phải nạp toàn bộ tệp vào bộ nhớ để xây dựng Document Object Model (DOM). Đọc một thuộc tính yêu cầu phải phân tích mọi tính năng riêng lẻ.

GeoParquet: Dữ liệu dạng cột, được mã hoá dạng nhị phân

GeoParquet được xây dựng trực tiếp trên Apache Parquet, lưu trữ các bảng không gian theo cột thay vì theo hàng.

Các thuộc tính như county được lưu trong các khối liên tiếp, cho phép các kỹ thuật nén tiên tiến như mã hoá độ dài chạy (RLE), nén bit-packing và nén từ điển. Dữ liệu hình học được chuẩn hoá dưới dạng Well-Known Binary (WKB), kèm theo siêu dữ liệu JSON nhúng mô tả hệ tham chiếu không gian (CRS), hộp bao và các loại hình học.

Vì GeoParquet là dạng nhị phân và theo cột:

  • Chi phí phân tích tọa độ bằng không: Các hình học được lưu trực tiếp dưới dạng nhị phân, bỏ qua các chuyển đổi tốn kém từ chuỗi sang số thực.
  • Đẩy xuống phép chiếu: Nếu quy trình downstream của bạn chỉ cần các cột county và pop_density, trình đọc sẽ chỉ lấy các offset byte đó từ đĩa hoặc S3, hoàn toàn bỏ qua cột hình học.
  • Phân vùng Nhóm Hàng: Các tệp Parquet chia các bản ghi thành các "Row Groups" độc lập (thường từ 100.000 đến 1.000.000 hàng mỗi nhóm) kèm theo thống kê min/max cho mọi cột.

2. So sánh trực tiếp: Các chỉ số cốt lõi

Evaluation MetricGeoJSONGeoParquet
Data FormatPlain-text JSON (UTF-8)Binary columnar (Apache Parquet)
Geometry RepresentationNested arrays of coordinate stringsStandardized Well-Known Binary (WKB)
Compression RatioPoor (requires gzip/bzip2 to reduce)Exceptional (native Zstd, Snappy, Gzip)
Column Projection❌ No (entire record must be parsed)✅ Yes (fetch only the columns you need)
Spatial Predicate Pushdown❌ No (requires full scan)✅ Yes (using bounding box metadata)
Cloud Object Storage (S3/GCS)❌ Poor (must download full file)✅ Cloud-native (supports HTTP range requests)
Human Readability✅ Direct viewing in text editors❌ Requires CLI, GIS app, or code
Web Browser SupportNative JavaScript (JSON.parse)Requires WebAssembly (e.g., duckdb-wasm, parquet-wasm)
Standardization BodyIETF (RFC 7946)OGC (Open Geospatial Consortium standard)

3. Hiệu suất lưu trữ và chuẩn đoán kích thước tệp

Khi mở rộng từ hàng nghìn lên hàng triệu bản ghi, sự chênh lệch về lưu trữ mở rộng đáng kể.

Trong các bài kiểm tra tiêu chuẩn sử dụng các bản ghi không gian mở thực tế (như các footprint tòa nhà của OpenStreetMap, ranh giới TIGER của Cục Điều tra Dân số Hoa Kỳ, và nhật ký AIS toàn cầu của tàu), GeoParquet thường đạt giảm lưu trữ từ 70% đến 85% so với GeoJSON thô, và vượt qua .geojson.gz thêm 20% đến 40%.

Tại sao GeoParquet lại nhỏ hơn nhiều?

  1. Dictionary Encoding: Các thuộc tính chuỗi lặp lại (ví dụ: mã bang, phân loại sử dụng đất) được lập chỉ mục thành các con trỏ số nguyên nhỏ thay vì lưu trữ lặp lại dưới dạng chuỗi dài.
  2. Compact Binary Coordinates: Một điểm 2D trong GeoJSON chiếm khoảng 30 đến 45 byte văn bản ASCII ([-122.4194155, 37.7749295]). Trong WKB, cùng cặp tọa độ đó chỉ cần chính xác 16 byte.
  3. Modern Compression Algorithms: Zstandard (Zstd) và Snappy nén các mảng byte dạng cột hiệu quả hơn nhiều so với Gzip tiêu chuẩn có thể nén văn bản dựa trên hàng xen kẽ.

4. Hiệu năng truy vấn và quy trình công việc đám mây bản địa

Yếu tố phân biệt lớn nhất cho các bộ dữ liệu lớn không chỉ là lưu trữ—mà là độ trễ truy vấn và việc sử dụng bộ nhớ.

1. Đọc có chọn lọc qua chiếu cột

Hãy tưởng tượng một bộ dữ liệu parcel quốc gia 15 GB chứa 60 thuộc tính (tên chủ sở hữu, mã số thuế, lịch sử giấy chứng nhận, mã vùng quy hoạch và các ranh giới đa đa giác phức tạp).

  • Trong GeoJSON: Nếu bạn muốn tính giá trị tài sản được đánh giá trung bình cho mỗi mã zip, công cụ phân tích của bạn phải tải xuống và phân tích toàn bộ 15 GB, bao gồm hàng triệu đỉnh ranh giới phức tạp.
  • Trong GeoParquet: Các công cụ phân tích như DuckDB, Apache Sedona, Polars hoặc AWS Athena chỉ đọc các cột zip_code và assessed_value. Thay vì chuyển 15 GB, công cụ của bạn tải xuống và quét dưới 80 MB.

2. Yêu cầu Phạm vi HTTP trên Lưu trữ Đám mây

GeoParquet hoạt động liền mạch như một định dạng không gian địa lý đám mây gốc.

Vì các tệp Parquet lưu trữ các offset nội bộ và siêu dữ liệu trong phần chân tệp, các thư viện khách hàng có thể gửi yêu cầu HTTP GET Range: bytes=... tới các kho lưu trữ đối tượng đám mây như Amazon S3, Google Cloud Storage hoặc Azure Blob Storage. Thay vì tải xuống toàn bộ tệp đa gigabyte, khách hàng đọc phần chân tệp, xác định các offset byte chính xác nơi các bản ghi liên quan nằm và chỉ tải xuống các phần cần thiết.

Client (DuckDB / Python / QGIS)
       │
       ├── 1. Read footer metadata (HTTP Range Request) ───► Cloud Storage (S3 / GCS)
       │                                                              │
       ◄── 2. Returns column offsets & row-group stats ───────────────┘
       │
       ├── 3. Read ONLY requested column chunks & ranges ─────────────►
       │                                                              │
       ◄── 4. Fast binary stream (minimal I/O & egress) ──────────────┘

5. Hệ sinh thái Phần mềm & Hỗ trợ Công cụ

Trong lịch sử, ưu điểm chính của GeoJSON là hỗ trợ công cụ toàn cầu. Mặc dù điều này vẫn đúng đối với môi trường trình duyệt, hệ sinh thái của GeoParquet đã phát triển nhanh chóng:

  • Desktop GIS: Hỗ trợ đọc/ghi bản địa trong QGIS 3.28+, ArcGIS Pro và GDAL/OGR 3.5+.
  • Analytical Engines & Languages: Khả năng đọc/ghi vector nhanh trên Python (GeoPandas, pyarrow), R (sf), DuckDB (qua phần mở rộng không gian), Apache Sedona và Snowflake.
  • Big Data Pipelines: Tích hợp bản địa trên Apache Spark, Trino, Presto và Databricks.
  • Client-Side Web Maps: Các thư viện WebAssembly nhẹ (như parquet-wasm và duckdb-wasm) hiện cho phép trình duyệt web truy vấn các tệp GeoParquet trực tiếp trên thiết bị khách mà không cần máy chủ trung gian GIS.

6. Ma trận Quyết định Thực tiễn: Khi nào nên sử dụng cái nào?

                                Dataset Size & Use Case
                                           │
             ┌─────────────────────────────┴─────────────────────────────┐
             ▼                                                           ▼
     Under 50–100 MB                                              Over 100 MB
(API payloads, simple maps)                                (Data warehousing, big data)
             │                                                           │
             ▼                                                           ▼
      Use **GeoJSON**                                            Use **GeoParquet**
• Direct Mapbox/Leaflet integration                        • High compression ratios
• Human-readable inspection                                • Sub-second analytical queries
• Standard REST API responses                              • Direct S3/GCS HTTP range reads

Chọn GeoJSON nếu:

  • Bộ dữ liệu của bạn dưới 50 MB đến 100 MB.
  • Bạn đang trả về các phản hồi tải nhẹ từ REST API tới các client phía trước.
  • Bạn đang xây dựng các bản đồ web nhẹ bằng Leaflet, MapLibre hoặc Mapbox GL JS mà không có lớp dịch trung gian.
  • Bạn cần chỉnh sửa hoặc kiểm tra thủ công nhanh chóng trong một trình soạn thảo mã hoặc văn bản tiêu chuẩn.

Chọn GeoParquet nếu:

  • Bộ dữ liệu của bạn vượt quá 100 MB, hoặc chứa hàng trăm nghìn đối tượng không gian phức tạp.
  • Bạn đang lưu trữ các tài sản vector trong lưu trữ đối tượng đám mây (S3, GCS, MinIO, Azure Blob).
  • Bạn thực hiện phân tích SQL không gian, kỹ thuật tính năng, hoặc các pipeline học máy bằng Python, DuckDB, Spark hoặc Databricks.
  • Bạn muốn giảm chi phí lưu trữ, tránh phí truyền dữ liệu ra mạng, và loại bỏ các sự cố tràn bộ nhớ.

7. Ví dụ Di chuyển: Chuyển đổi GeoJSON sang GeoParquet

Chuyển đổi các tài sản không gian hiện có sang GeoParquet chỉ cần vài dòng mã.

Sử dụng Python (GeoPandas)

import geopandas as gpd

# 1. Read the legacy GeoJSON file
gdf = gpd.read_file("large_boundaries.geojson")

# 2. Write directly to GeoParquet using modern Zstandard compression
gdf.to_parquet("large_boundaries.parquet", compression="zstd")

Sử dụng GDAL / OGR (CLI)

ogr2ogr -f Parquet \
  -oo LCO:COMPRESSION=ZSTD \
  large_boundaries.parquet \
  large_boundaries.geojson

Sử dụng DuckDB

INSTALL spatial;
LOAD spatial;

-- Direct convert via SQL
COPY (
  SELECT * FROM ST_Read('large_boundaries.geojson')
) TO 'large_boundaries.parquet' 
WITH (FORMAT PARQUET, COMPRESSION 'ZSTD');

8. Tóm tắt: Kết luận về các bộ dữ liệu lớn

Đối với các bộ dữ liệu nhỏ và các điểm cuối web trực tiếp, GeoJSON vẫn là định dạng tiện ích đáng tin cậy, không rắc rối.

Tuy nhiên, đối với các bộ dữ liệu lớn, GeoParquet vượt trội một cách khách quan trong mọi danh mục vận hành. Nó cung cấp kích thước tệp nhỏ hơn, chi phí lưu trữ giảm đáng kể, khả năng đọc không gian gần như tức thì, và tích hợp gốc với các kho dữ liệu đám mây hiện đại.

Nếu các pipeline địa không gian của bạn đang gầm gừ dưới tải trọng của các tệp GeoJSON quá lớn, việc chuyển sang GeoParquet là một trong những nâng cấp hạ tầng hiệu quả nhất mà bạn có thể thực hiện.


Câu hỏi thường gặp (FAQ)

Q1. GeoParquet có phải là tiêu chuẩn GIS được công nhận chính thức không? Có, GeoParquet là một tiêu chuẩn mở chính thức được duy trì dưới sự hướng dẫn của Tổ chức Địa không gian Mở (OGC).

Q2. Tôi có thể trực tiếp hiển thị tệp GeoParquet trong các thư viện bản đồ web như Leaflet hoặc Mapbox GL JS không? Mặc dù không được phân tích nguyên bản như GeoJSON, bạn vẫn có thể hiển thị GeoParquet trong trình duyệt bằng các gói WebAssembly như parquet-wasm hoặc bằng cách chuyển đổi tệp sang Vector Tiles (PMTiles/MVT) khi nhập dữ liệu.

Q3. GeoParquet có hỗ trợ nhiều hệ quy chiếu tọa độ (CRS) không? Có, không giống như GeoJSON (được giới hạn chặt chẽ ở WGS 84 / EPSG:4326 theo RFC 7946), GeoParquet cho phép định nghĩa CRS tùy chỉnh trực tiếp trong siêu dữ liệu nhúng của tệp.

Câu 4. GeoParquet so sánh với FlatGeobuf như thế nào đối với các bộ dữ liệu không gian lớn? FlatGeobuf được tối ưu cho việc truyền phát các tính năng không gian trực tiếp tới bản đồ web tương tác bằng cách sử dụng chỉ mục không gian R-Tree, trong khi GeoParquet được thiết kế cho phân tích cột hiệu suất cao, nén và lưu trữ kho dữ liệu lớn.

Câu 5. Tôi có thể mở tệp GeoParquet trong phần mềm GIS trên máy tính để bàn như QGIS không? Có, các phiên bản hiện đại của QGIS (phiên bản 3.28 trở lên) hỗ trợ kéo, thả, xem và tạo kiểu cho các tệp GeoParquet mà không cần plugin của bên thứ ba.

Xem Thêm

Định dạng tệp GIS tại FileFormat.com

Top 5 định dạng tệp GIS cho Google Maps

Tin tức định dạng tệp

Diễn đàn định dạng tệp