如何修改坐标查地理信息代码以消除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
相关产品推荐
相关产品推荐

