在GeoPandas中获取几何图形之间交集的数量

4

使用GeoPandas对象,是否可以获取两个几何图形之间的交集计数?也就是说,我想计算一个GeoDataFrame中的多边形或线条与另一个GeoDataFrame中每个多边形相交的数量。在浏览GeoPandas文档时,我没有看到简单的方法来完成这个任务,但在转向低级工具之前,我想确认一下。


https://stackoverflow.com/questions/54127731/how-can-i-count-the-number-of-polygons-a-shape-intersects - swatchai
3个回答

2
您想进行空间连接操作:geopandas.tools.sjoin()

这里有一个例子在这个Jupyter Notebook中,请看名为空间连接的部分。它将一组点(midpoints)计入一组多边形(bins)中。两种几何图形都定义了一个GeoDataFrame

截至撰写本文时,tools.sjoin()不在当前版本的geopandas中。我无法在他们的任何分支中构建geopandas.tools,但是我已经在我的分支中修复了它,对于我来说可以使用。我的修复是一个开放的PR


1
我不知道是否有内置工具可以做到这一点,但我不是专家。同时,使用一些pandas技巧很容易实现:
import geopandas as gpd
from shapely.geometry import *

p1 = Point(.5,.5)
p2 = Point(.5,1)
p3 = Point(1,1)

poly = Polygon([(0,0), (0,2), (2,2), (2,0)])

df1 = gpd.GeoSeries([p1,p2,p3])
df2 = gpd.GeoDataFrame([poly,p3], columns=['geometries'])

f = lambda x:np.sum(df1.intersects(x))
df2['geometries'].apply(f)

应返回:
0    3
1    1
Name: geometries, dtype: int64

0
考虑两个几何体(点和多边形),它们至少有一个交点。
  1. 空间连接您的图层

您应该编写类似以下内容的代码: pointsInPolygon = gpd.sjoin(points, polygons, how="inner", op='intersects')

  1. 添加一个常量值为1的字段 您应该编写类似以下内容的代码:pointsInPolygon['const']=1

  2. 按照要聚合数据的列分组字段 您应该编写类似以下内容的代码:pointsInPolygon.groupby(['field']).sum()

列[const]将给出两个几何体之间交点的计数。

如果您想查看其他列,只需输入类似以下内容的代码:df = pointsInPolygon.groupby('field').agg({'columnA':'first', 'columnB':'first', 'const':'sum'}).reset_index()

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