我在同一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
这是预期的输出吗?我会误解文档吗? 预先感谢!
答案 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 >