【发布时间】:2021-10-27 10:22:51
【问题描述】:
我必须确定该点是否属于某个区域。信息由 geojson 文件给出。 我通过以下方式创建了 DataFrame:
choro = pd.concat([pd.DataFrame({'name':block['properties']['name'], 'area': shape(block['geometry'])}) for block in geojson['features']], ignore_index=True)
该代码带有警告:
ShapelyDeprecationWarning:多部分几何的迭代已被弃用,并将在 Shapely 2.0 中删除。使用
geoms访问多部分几何的组成部分的属性
但有效!顺便说一句,如果您知道如何修改代码以关闭该警告 - 非常值得!
数据框看起来像:
这里是检查点是否属于区域的代码:
for index, area in choro.iterrows():
polygon = area['area']
if polygon.contains(point):
print('Point belongs to ',area['name'])
如果我更改我的数据框(排除“shape”命令)以仅获取坐标(并且没有警告消息):
choro = pd.concat([pd.DataFrame({'name':block['properties']['name'], 'area': block['geometry']['coordinates']}) for block in geojson['features']], ignore_index=True)
我会:
显然是多边形的“形状”命令:
polygon = shape(area['area'])
和:
polygon = MultiPolygon(area['area'])
不再工作了。
问题是我如何才能获得更清晰的代码:将多边形(或任何其他“工作”结构)存储在数据框结构中,以使用 shapely 函数来查找点是否属于该区域并且没有任何警告或错误。
【问题讨论】:
标签: python shapely point-in-polygon