【问题标题】:Getting counts of intersections between geometries in GeoPandas在 GeoPandas 中获取几何图形之间的交叉点数
【发布时间】:2015-04-29 09:30:32
【问题描述】:

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

【问题讨论】:

标签: python geopandas


【解决方案1】:

您需要空间连接:geopandas.tools.sjoin()

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

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

【讨论】:

    【解决方案2】:

    我不知道执行此操作的内置工具,但我不是专家。同时,它很容易通过一些 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
    

    【讨论】:

      【解决方案3】:

      让我们考虑至少相交一次的 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()

      【讨论】:

        猜你喜欢
        • 2021-06-03
        • 2023-01-19
        • 2020-12-22
        • 1970-01-01
        • 1970-01-01
        • 2018-10-01
        • 2019-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多