geopandas 已知交叉点返回 False

问题描述

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

数据集如下所示:

enter image description here

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

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 相交,该 df 有很多行,最终只得到相交的多边形。我错过了什么吗?

解决方法

您选择的不是一个多边形,而是 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)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...