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
↓
列式二进制存储
↓
大规模数据分析
两者的定位不同。
| 对比 | GeoParquet | GeoJSON |
|---|---|---|
| 基础格式 | Parquet | JSON |
| 存储方式 | 列式 | 文本 |
| 文件大小 | 通常更小 | 通常更大 |
| 数据分析 | 非常适合 | 一般 |
| Web API | 一般 | 非常适合 |
| 大数据 | 非常适合 | 不太适合 |
| 云存储 | 非常适合 | 可以 |
| 人类可读 | 较差 | 较好 |
简单来说:
GeoJSON
↓
交换和Web地图
GeoParquet
↓
分析和大规模数据
GeoParquet与Shapefile
Shapefile是传统GIS矢量数据格式。
GeoParquet则更加偏向现代数据工程。
| 对比 | GeoParquet | Shapefile |
|---|---|---|
| 存储方式 | Parquet | 多文件 |
| 列式存储 | 支持 | 不支持 |
| 大数据 | 非常适合 | 一般 |
| 云计算 | 非常适合 | 不适合 |
| 多图层 | 通过数据组织实现 | 一个文件一个图层 |
| 属性限制 | 较少 | 较多 |
| GIS兼容 | 越来越广泛 | 非常广泛 |
| 数据分析 | 非常适合 | 一般 |
GeoParquet与GeoPackage
GeoPackage和GeoParquet都可以保存GIS矢量数据,但使用场景不同。
| 对比 | GeoParquet | GeoPackage |
|---|---|---|
| 基础技术 | Parquet | SQLite |
| 存储方式 | 列式 | 数据库表 |
| 大数据分析 | 非常适合 | 一般 |
| 数据库事务 | 不以此为核心 | 支持 |
| 多图层 | 可通过数据组织实现 | 原生支持 |
| 云数据湖 | 非常适合 | 一般 |
| 桌面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 数据