获取GeoPandas中几何之间的交叉点计数

时间:2015-02-26 20:23:59

标签: python geopandas

是否可以使用GeoPandas对象获取两个几何之间的交点计数?也就是说,我想要计算一个GeoDataFrame中与另一个GeoDataFrame中的每个多边形相交的多边形或线串的数量。在浏览GeoPandas文档时,我没有看到这样做的简单方法,但是想要在继续​​使用更低级别的工具之前进行检查。

3 个答案:

答案 0 :(得分:2)

您想要一个空间连接:geopandas.tools.sjoin()

有一个示例in this Jupyter Notebook - 请查看名为空间联接的部分。这会将一组点(midpoints)计算为一组多边形(bins)。两个几何都定义GeoDataFrame

在撰写本文时,tools.sjoin()不在geopandas的当前版本中。我无法让geopandas.tools在他们的任何一个分支中建立,但我修复了它 - 无论如何 - in my fork。我的修正是open PR

答案 1 :(得分:1)

我不知道内置工具可以做到这一点,但我不是专家。与此同时,一些熊猫魔术很容易做到:

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

答案 2 :(得分:0)

让我们考虑至少相交一次的 02 个几何图形(点和多边形)。

  1. Spatial join

你应该这样写: pointsInPolygon = gpd.sjoin(points, polygons, how="inner", op='intersects')

  1. 添加一个以1为常数值的字段 你应该这样写:pointsInPolygon['const']=1

  2. Group by 根据要聚合数据的列的字段 你应该这样写:pointsInPolygon.groupby(['field']).sum()

[const] 列将为您提供两个几何图形之间的交点数。

如果您还想查看其他列,只需键入如下内容:df = pointsInPolygon.groupby('field').agg({'columnA':'first', 'columnB' :'first', 'const':'sum'}).reset_index()