如何在Python中缩减Geopandas/Pandas生成的GeoJSON文件大小
问题
我有一个包含几何信息的Geopandas GeoDataFrame,数据如下:
Date , value, Region Name, Geometry 2022-01-01 10 , ABC , Point((194 34),(121,23)) 2022-02-01, 12 , ABC , Point((194 34),(121,23)) 2022-02-01, 13 , DEF , Point((195 35),(123,24))
近似Python代码如下:
import pandas as pd import geopandas from shapely.geometry import Point d = pd.DataFrame({ 'RegionName': ['ABC', 'ABC','DEF'], 'Date': ['2021-01-01', '2021-02-01','2021-01-01'], 'Values': [10,11,12], 'Latitude': [-34.58, -34.58, -33.45], 'Longitude': [-58.66, -58.66, -70.66] }) # 修正原代码问题:正确创建带几何信息的GeoDataFrame gdf = geopandas.GeoDataFrame( d, geometry=geopandas.points_from_xy(d.Longitude, d.Latitude), crs="EPSG:4326" )
需求:将这些数据保存为可被Mapbox、Leaflet等地图工具解析的JSON/GeoJSON文件,同时缩减文件大小——把重复的几何数据只存储一次,将非重复的日期、数值关联到对应几何上。期望的聚合效果示意(非标准格式):
[ ---Region name: -----ABC -----Date: --------2022-01-01 --------2022-02-01 -----Value: --------10 --------12 -----Geometry --------Polygon((194 34),(121,23)) ---Region name: -----DEF -----Date: --------2022-02-01 -----Value: --------13 -----Geometry --------Polygon((194 34),(121,23)) ]
解决方案
核心思路是按区域分组聚合非重复数据、保留唯一几何,同时输出标准GeoJSON格式(地图工具仅支持标准格式解析),具体步骤如下:
1. 分组聚合数据
利用Pandas分组功能,按RegionName将同一区域的日期、数值合并为列表,几何信息取组内第一条(因同一区域几何重复):
# 分组聚合处理 aggregated_gdf = gdf.groupby('RegionName').agg( Dates=('Date', list), Values=('Values', list), geometry=('geometry', 'first') ).reset_index()
2. 保存为标准GeoJSON
直接将聚合后的GeoDataFrame导出为GeoJSON,此时每个Feature对应一个区域,几何仅存一次,日期和数值以列表形式存储在属性中:
# 导出为GeoJSON文件 aggregated_gdf.to_file('aggregated_regions.geojson', driver='GeoJSON')
生成的GeoJSON结构示例
输出的文件为标准FeatureCollection格式,完全兼容地图工具:
{ "type": "FeatureCollection", "features": [ { "type": "Feature", "properties": { "RegionName": "ABC", "Dates": ["2021-01-01", "2021-02-01"], "Values": [10, 11] }, "geometry": { "type": "Point", "coordinates": [-58.66, -34.58] } }, { "type": "Feature", "properties": { "RegionName": "DEF", "Dates": ["2021-01-01"], "Values": [12] }, "geometry": { "type": "Point", "coordinates": [-70.66, -33.45] } } ] }
方案优势
- 完全兼容Mapbox、Leaflet等工具,可直接加载渲染几何图形
- 同一区域仅存储一次几何数据,大幅缩减文件体积(数据量越大效果越明显)
- 日期和数值以列表形式关联,前端可通过遍历列表获取该区域的全量时间序列数据
内容的提问来源于stack exchange,提问作者Moh-Spark
相关产品推荐
相关产品推荐

