微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

geopandas 已知交叉点返回 False

如何解决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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?