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

在geopandas的naturalearth_lowres世界地图中移除夏威夷并解决裁剪报错

问题根源
  • GeoPandas版本兼容问题:clip方法从GeoPandas 0.10版本才开始支持直接传入Polygon几何对象,0.9及更早版本仅支持传入GeoDataFrame/GeoSeries类型参数,这是触发TypeError的直接原因。
  • 多边形构造错误:手动定义的多边形坐标点顺序有误,出现了重复顶点和自交的情况,因此polygon.is_valid返回False。原坐标序列会先从(180, 85)跳回(-175, 85),导致几何图形非法。
修正方案

推荐两种合法构造裁剪矩形的方式,同时兼容不同版本GeoPandas:

方案1:手动修正坐标点

按顺时针/逆时针顺序依次定义矩形四个顶点,最后闭合回起点即可:

#!/usr/bin/python
import geopandas as gpd
from shapely.geometry import Polygon        

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# 移除南极洲
world = world[(world.pop_est>0) & (world.name!="Antarctica")]

# 构造合法裁剪矩形:经度范围-175°~180°,纬度范围-85°~85°,自动过滤西经175°以西的夏威夷、波利尼西亚区域
polygon = Polygon([
    (-175, -85), # 左下角
    (-175, 85),  # 左上角
    (180, 85),   # 右上角
    (180, -85),  # 右下角
    (-175, -85)  # 闭合回起点
])
print(polygon.is_valid) # 此时返回True

# 兼容所有版本的裁剪写法
poly_gdf = gpd.GeoDataFrame(geometry=[polygon], crs=world.crs)
world = world.clip(poly_gdf)

方案2:使用shapely.geometry.box一键生成矩形(更稳妥,避免手动写坐标出错)

from shapely.geometry import box
# 直接传入最小x、最小y、最大x、最大y即可生成合法矩形
polygon = box(minx=-175, miny=-85, maxx=180, maxy=85)

后续裁剪逻辑和方案1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:06:03