问题描述
我有两组多边形。我想从一个数据集中选择一个多边形(通过使用有效的 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 相交,该 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)