【问题标题】:geopandas known intersection returns Falsegeopandas 已知交集返回 False
【发布时间】:2021-07-16 17:35:52
【问题描述】:

我有两组多面体。我想从一个数据集中选择一个多边形(通过使用有效的 matplotlib 单击事件),然后从与它相交的第二个数据集中选择所有多边形。当我绘制数据集时,它们明显重叠(见下文),但我的交集总是返回 False。

数据集如下所示:

我使用我在这里模拟的点击事件选择了一个红色多边形:

Dataset1 = gpd.read_file('Datafile_1.gpkg')
Dataset1_sub = Dataset1[Dataset1['ID']==15000]

这会返回:

(17795, 73)
DN  ...     ID
14999  19  ...  15000

[1 rows x 74 columns]

但是当我尝试像这样与我的第二个数据集(黑框)相交时:

Dataset2 = gpd.read('Datafile_2.gpkg')

Dataset2_sub = Dataset2.intersects(Dataset1_sub)

这对于数据集 2 的所有记录都返回 False,但不应该至少有一个是 True 吗?:

0       False
1       False
2       False
3       False
4       False
...
480     False
481     False
482     False
483     False
5162    False
dtype: bool

我确实收到了警告:

UserWarning: The indices of the two GeoSeries are different.
warn("The indices of the two GeoSeries are different.")

但我不知道这是否是造成这种情况的原因。我正在有效地尝试将一个 df 与一行相交,另一个 df 有很多行,最终只得到相交的多边形。我错过了什么吗?

【问题讨论】:

    标签: python intersection geopandas


    【解决方案1】:

    您不选择一个多边形,而是选择 GeoDataFrame 的一行。因此,您在系列上使用intersects,而不是多边形。作为shown in the documentation,geopandas 对齐这些系列并进行逐行 1:1 操作。如果要针对单个几何检查所有行,则需要传递 shapely.geometry

    # this is shapely.geometry.Polygon
    geom = Dataset1.loc[Dataset1['ID'] == 15000, 'geometry'].iloc[0]
    
    Dataset2.intersects(geom)
    
    

    【讨论】:

    • 谢谢。注意,需要编辑以删除“几何”后不匹配的“]”
    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多