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

如何将含MultiPolygon列表的DataFrame转为GeoJSON导入QGIS?

将含MultiPolygon列表的Pandas DataFrame转为GeoJSON(适用于QGIS导入)

用geopandas结合shapely可以快速完成转换,核心是把DataFrame中的MultiPolygon坐标列表转为标准地理几何对象,再导出GeoJSON。

步骤1:安装依赖库

pip install geopandas shapely

步骤2:数据转换与导出

假设你的DataFrame结构如下(gid为唯一标识,multi_polygons列存储MultiPolygon的坐标列表,格式符合GeoJSON规范):

gidmulti_polygons
1[[[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]]
2[[[[102.0, 0.0], [103.0, 0.0], [103.0, 1.0], [102.0, 1.0], [102.0, 0.0]]]]

执行以下代码完成转换:

import pandas as pd
import geopandas as gpd
from shapely.geometry import MultiPolygon, Polygon

# 示例DataFrame(替换成你的实际数据)
df = pd.DataFrame({
    'gid': [1, 2],
    'multi_polygons': [
        [[[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]]],
        [[[[102.0, 0.0], [103.0, 0.0], [103.0, 1.0], [102.0, 1.0], [102.0, 0.0]]]]
    ]
})

def coords_to_multipolygon(coords_list):
    """将GeoJSON格式的坐标列表转为shapely MultiPolygon对象"""
    polygons = []
    # 遍历MultiPolygon中的每个Polygon
    for poly_coords in coords_list:
        # 第一个环是外环,后续是内环(孔洞)
        outer_ring = poly_coords[0]
        holes = poly_coords[1:] if len(poly_coords) > 1 else []
        # 确保环闭合(首尾坐标一致)
        if outer_ring[0] != outer_ring[-1]:
            outer_ring.append(outer_ring[0])
        for hole in holes:
            if hole[0] != hole[-1]:
                hole.append(hole[0])
        polygons.append(Polygon(outer_ring, holes=holes))
    return MultiPolygon(polygons)

# 转换几何列
df['geometry'] = df['multi_polygons'].apply(coords_to_multipolygon)

# 转为GeoDataFrame,指定坐标系(QGIS常用WGS84:EPSG:4326)
gdf = gpd.GeoDataFrame(df, geometry='geometry', crs='EPSG:4326')

# 导出为GeoJSON
gdf.to_file('polygons_output.geojson', driver='GeoJSON')

关键注意事项

  • 坐标顺序:GeoJSON要求经度在前,纬度在后,如果你的原始数据是[纬度, 经度],需要在转换函数中调换顺序,比如coord = (coord[1], coord[0])
  • 环闭合性:shapely要求Polygon的环必须首尾坐标一致,代码中已添加自动闭合逻辑,可根据实际情况调整
  • 坐标系设置:必须指定正确的CRS(如EPSG:4326),否则QGIS导入后可能出现位置偏移
  • 无效几何处理:如果转换后存在无效几何,可通过gdf = gdf[gdf.is_valid]过滤后再导出

QGIS导入验证

导出的GeoJSON文件直接拖入QGIS即可查看,若看不到多边形,可尝试:

  1. 检查坐标系是否匹配(右键图层→属性→坐标系)
  2. 使用Zoom to Layer Extent定位到多边形范围

内容的提问来源于stack exchange,提问作者Công Lý

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:13:00