3

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

4

3 回答 3

2

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

这个 Jupyter Notebook 中有一个示例— 查看名为Spatial join的部分。这是将一组点 ( midpoints) 计数到一组多边形 ( bins) 中。两种几何都定义了一个GeoDataFrame.

在撰写本文时,tools.sjoin()不在当前版本中geopandas。我无法geopandas.tools在他们的任何分支中构建,但我修复了它 - 无论如何对我来说 - <a href="https://github.com/kwinkunks/geopandas/tree/master" rel="nofollow">in我的叉子。我的解决办法是公开 PR

于 2015-10-09T19:10:42.803 回答
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
于 2015-05-25T14:44:49.260 回答
0

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

  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()

于 2021-03-07T16:24:08.670 回答