gpt4 book ai didi

python - 如何找到一个点位于 GeoPandas DataFrame 的哪个多边形内?

转载 作者:行者123 更新时间:2023-12-05 02:52:48 24 4
gpt4 key购买 nike

我下载了一个城市的 geojson 文件,并能够使用 geopandas 加载它。这个城市由不同的区组成,每个区都是一个多边形。现在要检查一个点是否位于城市内部,我对数据框的所有行进行了合并,并创建了整个城市的多边形。这样我就可以在不遍历整个数据帧的情况下检查点的位置

complete city polygon

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

现在的问题是,我想找到那个点具体在哪个病房内,我能想到的唯一方法就是遍历整个数据框。有什么有效的方法可以解决这个问题吗?比如我检查一个点是否在城市里面,它能不能也返回区号?

最佳答案

使用 geopandas 包中的函数 sjoin 进行空间连接( https://geopandas.org/reference/geopandas.sjoin.html ),要使用此功能,您必须确保 rtree 包可用。

加载数据框(多边形和点)后。我使用两个 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')

index right 列为您提供了该点所在的多边形的索引。如果此列为 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

关于python - 如何找到一个点位于 GeoPandas DataFrame 的哪个多边形内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62506697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com