如何从GeoJSON的GeometryCollection过滤并转换为MultiPolygon
处理GeoJSON中的GeometryCollection并筛选多边形几何类型
核心思路
遍历GeoJSON的每个要素,递归提取所有Polygon和MultiPolygon类型的几何对象:
- 直接保留
Polygon,将MultiPolygon拆分为单个Polygon - 遍历
GeometryCollection内的子几何,仅保留符合要求的类型 - 最后将所有保留的
Polygon合并为MultiPolygon,过滤掉无有效几何的要素
纯Python实现(无需第三方GIS库)
适合轻量处理,仅依赖内置json模块:
import json def extract_valid_polygons(geometry): polygons = [] def traverse(geom): geom_type = geom['type'] if geom_type == 'Polygon': polygons.append(geom['coordinates']) elif geom_type == 'MultiPolygon': polygons.extend(geom['coordinates']) elif geom_type == 'GeometryCollection': for sub_geom in geom['geometries']: traverse(sub_geom) # 其他几何类型直接忽略 traverse(geometry) return polygons # 读取原始GeoJSON with open('input.geojson', 'r', encoding='utf-8') as f: raw_data = json.load(f) # 处理每个要素 cleaned_features = [] for feat in raw_data['features']: valid_coords = extract_valid_polygons(feat['geometry']) if valid_coords: cleaned_feat = feat.copy() cleaned_feat['geometry'] = { 'type': 'MultiPolygon', 'coordinates': valid_coords } cleaned_features.append(cleaned_feat) # 生成处理后的GeoJSON cleaned_geojson = { 'type': raw_data['type'], 'features': cleaned_features, 'crs': raw_data.get('crs') } # 保存结果 with open('output.geojson', 'w', encoding='utf-8') as f: json.dump(cleaned_geojson, f, indent=2)
基于Geopandas的进阶实现
适合复杂拓扑场景(如自动合并重叠多边形、修复几何有效性):
import geopandas as gpd # 读取GeoJSON文件 gdf = gpd.read_file('input.geojson') # 解析GeometryCollection,仅保留多边形几何 gdf['geometry'] = gdf['geometry'].apply( lambda geom: geom.unary_union if geom.type == 'GeometryCollection' else geom ) # 过滤非多边形要素,统一转为MultiPolygon格式 valid_gdf = gdf[gdf['geometry'].type.isin(['Polygon', 'MultiPolygon'])] valid_gdf['geometry'] = valid_gdf['geometry'].apply( lambda geom: gpd.GeoSeries([geom]).unary_union if geom.type == 'Polygon' else geom ) # 保存处理结果 valid_gdf.to_file('output_geopandas.geojson', driver='GeoJSON')
注意事项
- 确保输入GeoJSON格式合法,无语法错误
- 纯Python实现仅处理几何结构,不做拓扑校验;Geopandas版本会自动修复无效几何
- 若需要保留要素的全部属性,代码中已通过
copy()方式完整保留原要素的properties字段
内容的提问来源于stack exchange,提问作者z star
相关产品推荐
相关产品推荐

