You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Geopandas切割JSON文件中的几何图形并自动化处理多边形?

用Geopandas实现多边形切割与合并并导出JSON

核心实现步骤

  • 识别所有存在重叠关系的多边形对
  • 对每对重叠多边形,用difference操作切割掉重叠区域,保留各自非重叠部分
  • 将所有非重叠部分合并到最后一个多边形中
  • 把处理后的多边形导出为包含(X,Y)坐标的JSON文件

完整代码示例

import geopandas as gpd
from shapely.geometry import Polygon, MultiPolygon
import json

# 1. 读取输入多边形数据(支持GeoJSON/Shapefile)
gdf = gpd.read_file("input_polygons.geojson")

# 过滤仅保留多边形/多面形数据
gdf = gdf[gdf.geometry.type.isin(['Polygon', 'MultiPolygon'])]

# 2. 找出所有重叠多边形对
overlap_pairs = []
for i in range(len(gdf)):
    for j in range(i+1, len(gdf)):
        if gdf.iloc[i].geometry.overlaps(gdf.iloc[j].geometry):
            overlap_pairs.append((i, j))

# 3. 切割重叠区域,收集非重叠部分
non_overlap_parts = []
processed_indices = set()

for idx1, idx2 in overlap_pairs:
    if idx1 not in processed_indices:
        # 移除当前多边形与另一多边形的重叠区域
        diff_geom = gdf.iloc[idx1].geometry.difference(gdf.iloc[idx2].geometry)
        if not diff_geom.is_empty:
            non_overlap_parts.append(diff_geom)
        processed_indices.add(idx1)
    if idx2 not in processed_indices:
        diff_geom = gdf.iloc[idx2].geometry.difference(gdf.iloc[idx1].geometry)
        if not diff_geom.is_empty:
            non_overlap_parts.append(diff_geom)
        processed_indices.add(idx2)

# 4. 将非重叠部分合并到最后一个多边形
target_geom = gdf.iloc[-1].geometry
if non_overlap_parts:
    merged_geom = target_geom.union(MultiPolygon(non_overlap_parts))
else:
    merged_geom = target_geom

# 5. 转换为(X,Y)坐标格式的JSON
def geom_to_coords(geom):
    if isinstance(geom, Polygon):
        # 提取外环坐标,保持(X,Y)顺序
        coords = list(geom.exterior.coords)
        return {"type": "Polygon", "coordinates": [coords]}
    elif isinstance(geom, MultiPolygon):
        poly_coords = []
        for poly in geom.geoms:
            poly_coords.append(list(poly.exterior.coords))
        return {"type": "MultiPolygon", "coordinates": poly_coords}

result_json = {
    "processed_polygon": geom_to_coords(merged_geom)
}

# 导出JSON文件
with open("output_polygons.json", "w") as f:
    json.dump(result_json, f, indent=2)

关键逻辑说明

  • overlaps():判断两个多边形是否存在有效重叠区域,是核心的重叠检测方法
  • difference():计算多边形差集,精准移除重叠部分,保留各自独立区域
  • union():将多个零散多边形合并为一个整体(支持多面形格式)
  • 坐标转换:手动提取Shapely几何的坐标点,确保输出严格遵循(X,Y)的顺序要求

注意事项

  • 若输入包含MultiPolygon,代码会自动处理其中的子多边形
  • 无重叠多边形时,直接保留最后一个多边形作为结果
  • 导出的JSON结构兼容GeoJSON规范,可直接用于其他空间分析工具

内容的提问来源于stack exchange,提问作者Brandon Ney Ccahua Yapo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:01:27