GIS

GeoParquet是什么

了解GeoParquet的基本概念、数据结构、空间数据存储方式、GeoParquet与GeoJSON、Shapefile、GeoPackage的区别以及GeoParquet在大规模GIS数据处理中的应用。

阅读约 67 分钟

GeoParquet是什么

GeoParquet是一种用于存储地理空间矢量数据的开放数据格式。

它建立在Apache Parquet列式存储格式之上,并增加了地理空间数据所需要的Geometry和坐标参考系统等信息。

简单来说:

GeoParquet就是让Parquet能够高效存储和处理GIS空间数据。

GeoParquet特别适合:

  • 大规模空间数据
  • 空间数据分析
  • 数据仓库
  • 云端GIS
  • 数据湖
  • 分布式计算
  • GIS大数据处理

GeoParquet有什么特点

GeoParquet具有以下特点:

  • 基于Apache Parquet
  • 列式存储
  • 高压缩率
  • 高读取效率
  • 支持Geometry
  • 支持CRS
  • 支持大规模数据
  • 适合云存储
  • 适合数据分析
  • 适合批量空间数据处理

可以理解为:

Parquet
    +
Geospatial Metadata
    ↓
GeoParquet

什么是Parquet

Apache Parquet是一种面向分析场景的列式数据存储格式。

传统CSV通常按照行存储:

id,name,city,population
1,北京,北京,2189
2,上海,上海,2487
3,广州,广州,1887

可以理解为:

Row 1
Row 2
Row 3

而Parquet采用列式存储:

id
├── 1
├── 2
└── 3

name
├── 北京
├── 上海
└── 广州

population
├── 2189
├── 2487
└── 1887

这种结构特别适合数据分析。

为什么GIS需要GeoParquet

传统GIS格式在处理大规模数据时存在一些限制。

例如:

GeoJSON
    ↓
文本格式
    ↓
文件可能很大

CSV:

CSV
    ↓
没有标准Geometry结构

Shapefile:

Shapefile
    ↓
多个文件
    ↓
传统格式限制

GeoPackage:

GeoPackage
    ↓
SQLite文件

而GeoParquet结合了:

列式存储
+
空间数据
+
空间元数据

更加适合现代数据工程和GIS大数据处理。

GeoParquet的基本结构

GeoParquet的数据可以理解为:

GeoParquet
│
├── Attribute Columns
│   ├── id
│   ├── name
│   └── category
│
├── Geometry Column
│   └── geometry
│
└── Geo Metadata
    ├── Geometry Type
    ├── CRS
    └── Encoding

例如:

id
name
population
geometry

其中:

id
name
population
    ↓
属性数据

geometry
    ↓
空间数据

Geometry是什么

GeoParquet可以保存矢量Geometry。

常见Geometry包括:

Point
LineString
Polygon
MultiPoint
MultiLineString
MultiPolygon

例如一个城市数据表:

cities
├── id
├── name
├── population
└── geometry

其中geometry可以是Point:

POINT (116.397 39.908)

也可以保存其他Geometry类型。

GeoParquet中的Geometry列

GeoParquet通常会存在一个Geometry列。

例如:

id | name | geometry
---|------|----------------------
1  | 北京 | POINT (...)
2  | 上海 | POINT (...)
3  | 广州 | POINT (...)

可以理解为:

Attribute Columns
        +
Geometry Column
        ↓
GIS Dataset

Geometry是表中的一列,而不是整个文件只能表示一种空间对象。

GeoParquet与普通Parquet

普通Parquet主要保存:

数字
字符串
日期
布尔值
数组
结构化数据

GeoParquet进一步加入:

Geometry
CRS
Geometry Encoding
Geo Metadata

因此:

Parquet
    ↓
数据分析

GeoParquet
    ↓
空间数据分析

GeoParquet中的空间参考系统

GeoParquet可以保存CRS信息。

例如:

EPSG:4326

或者:

EPSG:3857

这样读取GeoParquet时,可以知道Geometry使用什么坐标参考系统。

可以理解为:

Geometry
    ↓
Coordinates
    ↓
CRS
    ↓
确定空间位置

GeoParquet中的Geometry编码

Geometry不能简单地作为普通文本存储。

GeoParquet可以使用标准的二进制Geometry表示方式。

常见方式包括:

WKB

即:

Well-Known Binary

可以理解为:

Geometry
    ↓
WKB
    ↓
Parquet Binary Column

相比直接保存WKT文本:

POINT (116.397 39.908)

二进制方式更加适合机器处理和大规模数据存储。

GeoParquet与WKT

WKT是Geometry的文本表达方式。

例如:

POINT (116.397 39.908)

GeoParquet则是一个完整的数据存储格式。

因此:

WKT
    ↓
Geometry文本表示

而:

GeoParquet
    ↓
列式空间数据文件

GeoParquet内部可以使用WKB等方式保存Geometry。

GeoParquet与GeoJSON

GeoJSON:

JSON
    ↓
文本结构
    ↓
Web GIS

GeoParquet:

Parquet
    ↓
列式二进制存储
    ↓
大规模数据分析

两者的定位不同。

对比GeoParquetGeoJSON
基础格式ParquetJSON
存储方式列式文本
文件大小通常更小通常更大
数据分析非常适合一般
Web API一般非常适合
大数据非常适合不太适合
云存储非常适合可以
人类可读较差较好

简单来说:

GeoJSON
    ↓
交换和Web地图

GeoParquet
    ↓
分析和大规模数据

GeoParquet与Shapefile

Shapefile是传统GIS矢量数据格式。

GeoParquet则更加偏向现代数据工程。

对比GeoParquetShapefile
存储方式Parquet多文件
列式存储支持不支持
大数据非常适合一般
云计算非常适合不适合
多图层通过数据组织实现一个文件一个图层
属性限制较少较多
GIS兼容越来越广泛非常广泛
数据分析非常适合一般

GeoParquet与GeoPackage

GeoPackage和GeoParquet都可以保存GIS矢量数据,但使用场景不同。

对比GeoParquetGeoPackage
基础技术ParquetSQLite
存储方式列式数据库表
大数据分析非常适合一般
数据库事务不以此为核心支持
多图层可通过数据组织实现原生支持
云数据湖非常适合一般
桌面GIS支持程度持续提升非常适合
数据交换适合非常适合

可以简单理解:

GeoPackage
    ↓
文件型空间数据库

而:

GeoParquet
    ↓
分析型空间数据文件

GeoParquet与CSV

CSV是一种通用表格格式。

例如:

id,name,longitude,latitude
1,北京,116.397,39.908
2,上海,121.473,31.230

CSV本身并没有标准Geometry结构。

通常需要:

CSV
 ↓
longitude + latitude
 ↓
Point
 ↓
GeoParquet

而GeoParquet可以直接保存:

geometry

因此更加适合空间数据处理。

GeoParquet与大数据

GeoParquet最大的应用价值之一就是处理大规模空间数据。

例如:

10万条
100万条
1000万条
1亿条

普通GeoJSON在数据量非常大的情况下可能出现:

文件巨大
解析缓慢
内存占用高

而GeoParquet利用Parquet的列式存储和压缩能力,可以更加高效地处理大型数据集。

典型流程:

海量GIS数据
    ↓
GeoParquet
    ↓
对象存储
    ↓
数据分析

GeoParquet与数据湖

GeoParquet非常适合数据湖架构。

例如:

Object Storage
       ↓
GeoParquet
       ↓
Data Lake
       ↓
Spatial Analytics

可以存储:

  • 道路数据
  • 建筑物数据
  • POI
  • GPS轨迹
  • 遥感分析结果
  • 行政区数据
  • 土地利用数据
  • 物流数据

GeoParquet与云存储

GeoParquet特别适合放在对象存储中。

例如:

Cloud Storage
    ↓
city.parquet
    ↓
读取部分数据
    ↓
空间分析

常见云存储包括:

  • Amazon S3
  • Google Cloud Storage
  • Azure Blob Storage
  • MinIO

这种模式非常适合现代GIS数据平台。

GeoParquet与列式读取

GeoParquet可以只读取需要的列。

例如一个数据集包含:

id
name
category
population
area
geometry
created_at
updated_at

如果分析只需要:

name
population
geometry

就不需要读取所有字段。

可以理解为:

完整数据
    ↓
只读取需要的列
    ↓
减少I/O
    ↓
提高分析效率

这是Parquet相较于CSV等行式文本格式的重要优势。

GeoParquet与数据压缩

Parquet通常具有较好的压缩能力。

例如大量重复数据:

category
road
road
road
road
road

列式存储可以更加有效地进行压缩。

因此:

原始数据
    ↓
列式存储
    ↓
压缩
    ↓
更小的数据文件

对于大规模GIS数据,这一点非常重要。

GeoParquet空间数据处理流程

典型处理流程:

GIS Data
    ↓
GeoParquet
    ↓
读取
    ↓
空间过滤
    ↓
属性过滤
    ↓
空间分析
    ↓
结果输出

例如:

全国道路数据
    ↓
GeoParquet
    ↓
筛选北京市
    ↓
筛选高速公路
    ↓
统计道路长度

GeoParquet常见工具

GeoParquet可以与很多现代数据工具结合使用。

例如:

  • GDAL
  • GeoPandas
  • Apache Spark
  • DuckDB
  • Apache Arrow
  • PyArrow
  • QGIS

典型的数据处理链路:

GeoParquet
    ↓
GeoPandas
    ↓
Spatial Analysis

或者:

GeoParquet
    ↓
DuckDB
    ↓
SQL查询

也可以:

GeoParquet
    ↓
Spark
    ↓
分布式空间分析

GeoParquet与DuckDB

DuckDB是一种分析型数据库,非常适合处理Parquet数据。

因此可以形成:

GeoParquet
    ↓
DuckDB
    ↓
SQL
    ↓
Spatial Analysis

例如分析:

道路数量
建筑面积
POI数量
行政区统计

这使GeoParquet非常适合现代GIS数据分析。

GeoParquet与GeoPandas

GeoPandas可以读取和处理GeoParquet。

典型流程:

GeoParquet
    ↓
GeoPandas
    ↓
GeoDataFrame
    ↓
Spatial Analysis

GeoDataFrame同时包含:

属性列
+
geometry列

因此非常适合Python GIS数据分析。

GeoParquet与GDAL

GDAL是GIS领域非常重要的数据处理工具。

可以使用GDAL进行:

读取
转换
导出
投影转换
格式转换

例如:

Shapefile
    ↓
GDAL
    ↓
GeoParquet

或者:

GeoParquet
    ↓
GDAL
    ↓
GeoJSON

因此GeoParquet可以作为不同GIS格式之间的数据中间格式。

GeoParquet典型应用

海量POI数据

例如:

全国POI
    ↓
GeoParquet
    ↓
城市筛选
    ↓
分类统计

GPS轨迹

GPS轨迹
    ↓
GeoParquet
    ↓
道路匹配
    ↓
轨迹分析

建筑物数据

建筑物
    ↓
GeoParquet
    ↓
面积统计
    ↓
城市空间分析

道路数据

全国道路
    ↓
GeoParquet
    ↓
空间过滤
    ↓
道路分析

遥感和空间分析结果

对于大规模分析结果,也可以使用GeoParquet进行矢量数据存储和交换。

GeoParquet常见问题

GeoParquet是数据库吗?

不是传统意义上的数据库。

它是一种基于Parquet的空间数据文件格式。

可以理解为:

GeoParquet
    ↓
空间数据文件

而不是:

PostGIS
    ↓
服务器空间数据库

GeoParquet适合Web地图吗?

可以,但通常不是Web地图最直接的数据格式。

Web地图常见:

GeoJSON
Vector Tile
MVT

而GeoParquet更加适合:

数据存储
数据分析
数据湖
批量处理

因此典型架构可能是:

GeoParquet
    ↓
后端空间分析
    ↓
GeoJSON / MVT
    ↓
Web地图

GeoParquet可以保存多个Geometry吗?

GeoParquet数据模型支持Geometry列,并且现代GeoParquet规范可以描述一个数据集中的空间列及其相关元数据。

实际使用时,一个数据集通常会有一个主要Geometry列。

例如:

id
name
geometry

对于特殊数据,也可以根据具体实现和规范使用多个空间列。

GeoParquet适合什么场景

GeoParquet特别适合:

大规模空间数据
        ↓
数据分析
        ↓
云存储
        ↓
数据湖
        ↓
空间计算

例如:

  • 全国道路数据
  • 全国建筑物数据
  • 海量POI
  • GPS轨迹
  • 物流轨迹
  • 城市空间数据
  • 大规模土地利用数据

GeoParquet不适合什么场景

如果只是一个简单Web接口返回:

10个Point

使用GeoJSON通常更加方便。

如果需要多人在线编辑空间数据库:

PostGIS

通常更加合适。

如果需要桌面GIS项目文件:

GeoPackage

通常更加方便。

因此:

Web API
    ↓
GeoJSON

本地GIS项目
    ↓
GeoPackage

大规模分析
    ↓
GeoParquet

服务器空间数据库
    ↓
PostGIS

GIS数据格式选择

可以建立一个简单的选择体系:

数据交换
    ↓
GeoJSON

传统GIS
    ↓
Shapefile

本地空间数据库
    ↓
GeoPackage

大规模空间分析
    ↓
GeoParquet

服务器空间数据库
    ↓
PostGIS

Geometry文本
    ↓
WKT

GeoParquet知识结构

可以把GeoParquet总结为:

GeoParquet
│
├── Apache Parquet
│   ├── Columnar Storage
│   ├── Compression
│   └── Efficient I/O
│
├── Geometry
│   ├── Point
│   ├── LineString
│   ├── Polygon
│   └── Multi*
│
├── Geo Metadata
│   ├── CRS
│   ├── Geometry Type
│   └── Encoding
│
└── Spatial Analytics
    ├── GeoPandas
    ├── DuckDB
    ├── GDAL
    └── Spark

核心关系:

GIS Data
    ↓
Geometry + Attributes
    ↓
Parquet
    ↓
Geo Metadata
    ↓
GeoParquet
    ↓
Spatial Analytics

GeoParquet数据处理链路

现代GIS数据平台中,可以采用:

Shapefile
GeoJSON
GeoPackage
CSV
        ↓
      ETL
        ↓
   GeoParquet
        ↓
 Cloud Storage
        ↓
 DuckDB / Spark
        ↓
 Spatial Analysis
        ↓
GeoJSON / MVT
        ↓
 Web GIS

这也是GeoParquet非常重要的应用价值。

总结

GeoParquet是一种基于Apache Parquet的空间数据格式,主要面向现代GIS数据分析和大规模空间数据处理。

它的核心优势是:

列式存储
+
压缩
+
Geometry
+
CRS
+
高效数据分析

可以记住:

GeoJSON适合Web地图和数据交换,GeoPackage适合本地空间数据管理,GeoParquet适合大规模空间数据分析。

在现代GIS数据平台中,GeoParquet可以作为:

原始GIS数据
    ↓
统一空间数据格式
    ↓
云存储
    ↓
数据分析
    ↓
空间计算

因此GeoParquet是连接传统GIS数据与现代数据湖、云计算以及空间大数据分析的重要格式。

🧰

相关工具

使用 IYATools 在线工具快速处理 GIS 数据