如何确定一个点位于 GeoPandas 数据框中哪个多边形的内部?

3

我下载了一份城市的GeoJSON文件,并使用geopandas进行加载。这个城市由不同的选区组成,每个选区都是一个MultiPolygon。现在为了检查一个点是否在城市内,我对数据框中所有行进行了联合,并创建了整个城市的多边形。这样我就能够检查点所在位置,而无需遍历整个数据框。

完整的城市多边形

city = unary_union(city_geodf['geometry'])
city.contains(point)

现在的问题是,我想找出这个点具体在哪个区内,我所想到的唯一方法就是遍历整个数据框。有没有什么高效的解决办法?例如当我检查一个点是否在城市内时,可以同时返回该区的编号吗?

2个回答

4
使用geopandas包中的函数sjoin进行空间连接 (https://geopandas.org/reference/geopandas.sjoin.html)。使用此函数前,请确保安装了rtree软件包。
加载数据框(polygon和point)后,我使用了两个geopackages, 请根据您的geojson文件进行更改。
import geopandas as gpd
polygon_area = gpd.read_file('urban_atlantico.gpkg', layer='urban_atlantico')
point_cases = gpd.read_file('cases.gpkg', layer='cases')

polygon_area.head()

polygon_dataframe

point_cases.head()

point dataframe

# geopandas.sjoin(left_df, right_df, how='inner', op='intersects',
#                 lsuffix='left', rsuffix='right')
df_out = gpd.sjoin(point_cases, polygon_area, how='left', op='within')
索引右侧列为多边形提供了包含该点的索引。如果此列为NaN,则该点不在任何多边形内。

output

map

如果您收到此消息的错误:

UserWarning: Cannot generate spatial index: Missing package `rtree`.
warn("Cannot generate spatial index: Missing package `rtree`.")

您必须安装rtree,例如在Ubuntu或Google Collab中。
sudo apt-get update 
sudo apt-get install -y libspatialindex-dev
sudo apt-get install -y python-rtree
pip install rtree

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接