Geopandas touches geoseries 上的方法无法正常工作

Geopandas touches method on geoseries does not work as I expect

我在同一个 crs 中有两个地理系列。我想从 geoseries_1 中提取所有接触 geoseries_2 的任何多边形的多边形。在文档中它说geoseries是按元素测试的,所以我这样做:

geoseries_1.touches(geoseries_2)

但输出是

0      False
1      False
2      False
      ...
569    False
597    False
598    False
Length: 599, dtype: bool

但我知道 geoseries_1 的一些多边形实际上接触了 geoseries_2 中的一些多边形,如果我这样做,例如:

geoseries_1.touches(geoseries_2.geometry.iloc[0])),结果为:

0      True
1      True
2      False
      ...
569    False
597    True
598    False
Length: 599, dtype: bool

这是预期的输出吗?我误解了文档吗? 提前致谢!

是的,这是预期的(但有时令人惊讶的)行为:如果您将另一个 GeoSeries 作为参数传递,则 'touches' 操作是按元素完成的(因此 geoseries_1 的第一个与第一个geoseries_2,geoseries_1 的第二个和 geoseries_2 的第二个,...)。

所以它没有 "for all elements in geoseries_1, check each element of geoseries_1" 行为。这更像是一个空间连接。但是,不幸的是,GeoPandas 不支持 its sjoin function

中的 'touches' 空间关系

那么解决方法是什么?这取决于所需的输出:是否要重复具有多个匹配项的行?或者您只想拥有接触多边形的列表?


顺便说一句:我最近在 github 上提出了一个问题,建议禁用此自动对齐(所以如果 geoseries_1 和 geoseries_2 没有,至少上面会给出错误相同的长度和索引):https://github.com/geopandas/geopandas/issues/750