使用geopandas+geoplot绘制核密度热力图加projection参数崩溃如何解决
问题根因
你遇到的GEOSCoordSeq_getSize_r断言错误是GEOS空间计算库读取到空坐标序列触发的底层崩溃,常见触发原因有三类:
- 两个GeoDataFrame没有显式设置统一的CRS,传入投影参数后坐标转换异常生成空几何
- 数据中存在未清理的空几何值
- 底层依赖(pygeos、shapely、geopandas、cartopy)版本不兼容
解决步骤
1. 先预处理数据,统一CRS并清理空几何
你的数据坐标是经纬度格式,默认对应WGS84坐标系(EPSG:4326),先显式绑定CRS并过滤无效数据:
# 统一设置CRS,若你的数据本身采用其他坐标系请替换对应EPSG编码 df_points = df_points.set_crs(epsg=4326, allow_override=True) df_map = df_map.set_crs(epsg=4326, allow_override=True) # 过滤空几何 df_points = df_points[df_points.geometry.notna()].reset_index(drop=True) df_map = df_map[df_map.geometry.notna()].reset_index(drop=True)
2. 调整投影参数,适配数据范围
为Albers等面积投影显式指定和你的数据匹配的中心坐标,避免默认全球投影和小范围数据适配异常:
import geoplot import geoplot.crs as gcrs # 按你的数据坐标设置投影中心 custom_proj = gcrs.AlbersEqualArea(central_longitude=-101.67, central_latitude=21.12) # 绘图 ax = geoplot.kdeplot( df_points, cmap='Reds', shade=True, alpha=0.7, projection=custom_proj ) geoplot.polyplot(df_map, ax=ax, edgecolor='#333', facecolor='none')
3. 若仍报错,修复依赖版本冲突
pygeos已在shapely 2.0+版本中合并入shapely主库,旧版本pygeos和新的GEOS库兼容问题是这类报错的高发原因,执行以下命令修复:
# 卸载冲突的pygeos pip uninstall pygeos -y # 升级核心依赖到最新稳定版 pip install -U shapely geopandas geoplot cartopy
内容的提问来源于stack exchange,提问作者Arturo Sbr
相关产品推荐
相关产品推荐

