Python 如何使用geopandas高效地进行多边形中的点查询?

Python 如何使用geopandas高效地进行多边形中的点查询?,python,geopandas,Python,Geopandas,我有一个包含美国所有县的shapefile,我在一个lat/lon点上进行一系列查询,然后找到该点所在的县。现在我只是在所有的县里循环,在县内做pnt。这不是很有效。有更好的方法吗?您的情况看起来像是一个典型的情况,空间连接非常有用。空间连接的思想是使用地理坐标而不是属性来合并数据 geopandas中的三种可能性: 相交 在 包含 您似乎希望在中包含,可以使用以下语法: geopandas.sjoin(点、多边形、how=“inner”、op=“inner”) 注意:您需要安装rtree

我有一个包含美国所有县的shapefile,我在一个lat/lon点上进行一系列查询,然后找到该点所在的县。现在我只是在所有的县里循环,在县内做pnt。这不是很有效。有更好的方法吗?

您的情况看起来像是一个典型的情况,
空间连接
非常有用。空间连接的思想是使用地理坐标而不是属性来合并数据

geopandas
中的三种可能性:

  • 相交
  • 包含
您似乎希望在中包含
,可以使用以下语法:

geopandas.sjoin(点、多边形、how=“inner”、op=“inner”)
注意:您需要安装
rtree
才能执行此类操作。如果需要安装此依赖项,请使用
pip
conda
安装它

例子 作为一个例子,让我们绘制欧洲城市。这两个示例数据集是

import geopandas
将matplotlib.pyplot作为plt导入
world=geopandas.read\u文件(geopandas.dataset.get\u路径('naturalearth\u lowres'))
cities=geopandas.read_文件(geopandas.dataset.get_路径('naturalearth_cities'))
countries=world[world['continent']==“Europe”]。重命名(列={'name':'country'})
国家.总目(2)
最流行的大陆国家iso_a3 gdp_md_est几何学
18 142257519欧洲俄罗斯罗斯3745000.0多边形((178.725 71.099,180.000 71.516。。。
21 5320045欧洲挪威-99 364700.0多边形((15.143 79.674,15.523 80.016。。。
城市。负责人(2)
命名几何体
0梵蒂冈城角(12.45339 41.90328)
1圣马力诺角(12.44177 43.93610)
城市
是一个全球数据集,
国家
是一个欧洲范围的数据集

两个数据集需要位于同一投影系统中。如果不是,请在合并前使用
。以\u crs

data\u merged=geopandas.sjoin(城市、国家、how=“内部”,op=“内部”)
最后,为了查看结果,让我们绘制一张地图

f,ax=plt.子批次(1,figsize=(20,10))
数据图(轴=轴)
国家。绘图(轴=轴,α=0.25,线宽=0.1)
plt.show()

底层数据集将我们需要的信息合并在一起

数据合并头(5)
名称几何指数欧洲大陆国家iso a3 gdp马里兰州东部
0梵蒂冈城点(12.45339 41.90328)14162137802欧洲意大利ITA 222100.0
1圣马力诺点(12.44177 43.93610)14162137802欧洲意大利ITA 222100.0
192罗马点(12.48131 41.89790)14162137802欧洲意大利ITA 222100.0
2瓦杜兹点(9.51667 47.13372)114 8754413欧洲奥地利AUT 416600.0
184维也纳点(16.36469 48.20196)114 8754413欧洲奥地利AUT 416600.0

在这里,我使用了
internal
join方法,但这是一个可以更改的参数,例如,如果您希望保留所有点,包括不在多边形内的点。

检查空间连接:您的问题更适合于gis.stackexchange.com