使用GeoPandas对象,是否可以获取两个几何图形之间的交集计数?也就是说,我想计算一个GeoDataFrame中的多边形或线条与另一个GeoDataFrame中每个多边形相交的数量。在浏览GeoPandas文档时,我没有看到简单的方法来完成这个任务,但在转向低级工具之前,我想确认一下。
使用GeoPandas对象,是否可以获取两个几何图形之间的交集计数?也就是说,我想计算一个GeoDataFrame中的多边形或线条与另一个GeoDataFrame中每个多边形相交的数量。在浏览GeoPandas文档时,我没有看到简单的方法来完成这个任务,但在转向低级工具之前,我想确认一下。
geopandas.tools.sjoin()
。
这里有一个例子在这个Jupyter Notebook中,请看名为空间连接的部分。它将一组点(midpoints
)计入一组多边形(bins
)中。两种几何图形都定义了一个GeoDataFrame
。
截至撰写本文时,tools.sjoin()
不在当前版本的geopandas
中。我无法在他们的任何分支中构建geopandas.tools
,但是我已经在我的分支中修复了它,对于我来说可以使用。我的修复是一个开放的PR。
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
您应该编写类似以下内容的代码: pointsInPolygon = gpd.sjoin(points, polygons, how="inner", op='intersects')
添加一个常量值为1的字段 您应该编写类似以下内容的代码:pointsInPolygon['const']=1
按照要聚合数据的列分组字段 您应该编写类似以下内容的代码:pointsInPolygon.groupby(['field']).sum()
列[const]将给出两个几何体之间交点的计数。
如果您想查看其他列,只需输入类似以下内容的代码:df = pointsInPolygon.groupby('field').agg({'columnA':'first', 'columnB':'first', 'const':'sum'}).reset_index()。