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

解决Shapely中MultiPolygon与Polygon混合引发的弃用警告及绘图空白问题

解决Shapely 1.8.0+版本中混合Polygon/MultiPolygon数据的地图着色绘图问题

问题根源

Shapely 1.8.0及以上版本弃用了直接迭代MultiPolygon对象的旧方式,要求通过.geoms属性访问其组成部分,但Polygon对象本身没有.geoms属性,直接调用会触发AttributeError;同时旧代码的迭代逻辑失效会导致绘图空白,伴随大量弃用警告。

解决方案

方法1:用GeoPandas的explode方法(推荐,最简洁)

GeoPandas 0.10+版本提供的explode方法可以自动将MultiPolygon拆分为单个Polygon,同时保留原数据的所有属性,完美适配混合类型的几何数据:

# 假设你的地理数据存储在GeoDataFrame gdf中,数值列名为value_column
# 拆分MultiPolygon为单个Polygon,index_parts=True保留拆分后的索引关联
exploded_gdf = gdf.explode(index_parts=True)

# 直接调用plot方法着色绘图
exploded_gdf.plot(
    column='value_column',
    cmap='viridis',  # 可替换为你需要的配色方案
    edgecolor='gray',
    legend=True
)
plt.show()

方法2:自定义函数扁平化几何对象

如果无法使用GeoPandas的explode,可以手动写一个辅助函数,判断几何类型并拆分:

from shapely.geometry import Polygon, MultiPolygon
import matplotlib.pyplot as plt

def flatten_geoms(geom):
    """将Polygon/MultiPolygon转换为单个Polygon的列表"""
    if isinstance(geom, MultiPolygon):
        return list(geom.geoms)
    elif isinstance(geom, Polygon):
        return [geom]
    return []

# 处理数据,拆分几何并对应数值
flattened_geometries = []
corresponding_values = []

for _, row in gdf.iterrows():
    geoms = flatten_geoms(row['geometry'])
    flattened_geometries.extend(geoms)
    # 每个拆分后的Polygon对应原行的数值
    corresponding_values.extend([row['value_column']] * len(geoms))

# 绘图
fig, ax = plt.subplots()
# 构建颜色映射
vmin, vmax = min(corresponding_values), max(corresponding_values)
norm = plt.Normalize(vmin=vmin, vmax=vmax)
cmap = plt.cm.viridis

for geom, val in zip(flattened_geometries, corresponding_values):
    ax.add_geometries(
        [geom],
        crs=gdf.crs,
        facecolor=cmap(norm(val)),
        edgecolor='gray'
    )

# 设置地图范围
ax.set_xlim(gdf.total_bounds[0], gdf.total_bounds[2])
ax.set_ylim(gdf.total_bounds[1], gdf.total_bounds[3])
plt.show()

效果说明

两种方法都能解决类型不兼容的问题,消除Shapely弃用警告,同时确保所有县的几何图形都能被正确渲染,不会出现空白绘图的情况。

内容的提问来源于stack exchange,提问作者Elsri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:16:02