Geoseries上的Geopandas接触方法无法正常工作

时间:2018-08-28 05:09:59

标签: geopandas

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

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

这是预期的输出吗?我会误解文档吗? 预先感谢!

1 个答案:

答案 0 :(得分:0)

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

因此,它不是“针对geoseries_1中的所有元素,请检查geoseries_1中的每个元素”的行为。那更像是空间连接。但是,不幸的是,GeoPandas不支持its sjoin function

中的“接触”空间关系

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


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