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

如何修改坐标查地理信息代码以消除ShapelyDeprecationWarning?

解决ShapelyDeprecationWarning的代码修改方案

方案一:使用GeoPandas空间查询(推荐,更高效)

原代码用iterrows逐行遍历效率低,还会触发多部分几何体的迭代警告,直接用GeoPandas的空间筛选功能更简洁高效,完全避免警告:

import geopandas as gpd
from shapely.geometry import Point

pt = Point(8.7333333, 53.1333333) 
folder = 'C:\\My Documents\\'

# 读取世界边界数据
data = gpd.read_file(folder + 'TM_WORLD_BORDERS-0.3.shp')

# 直接筛选包含该点的行
result = data[data.geometry.contains(pt)]
# 输出结果
print(result)

方案二:修改原遍历逻辑(兼容旧写法)

如果一定要保留遍历的方式,需要针对多部分几何体(MultiPolygon)单独处理,通过geoms属性访问子几何体,避免触发旧的迭代API:

import geopandas as gpd
from shapely.geometry import Point, MultiPolygon

pt = Point(8.7333333, 53.1333333) 
folder = 'C:\\My Documents\\'

data = gpd.read_file(folder + 'TM_WORLD_BORDERS-0.3.shp')

for index, row in data.iterrows():
    geom = row['geometry']
    # 判断是否为多部分几何体
    if isinstance(geom, MultiPolygon):
        # 遍历每个子多边形
        for poly in geom.geoms:
            if poly.contains(pt):
                print(row)
                break
    else:
        # 单一多边形直接判断
        if geom.contains(pt):
            print(row)

原修改无效的原因

你之前尝试替换data.iterrows()为data.geoms是错误的,geoms是单个多部分几何体对象的属性,不是GeoDataFrame的属性,所以不能直接遍历data.geoms。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:46:39