geopandas:索引 contains() 方法的歧义

geopandas : ambiguity of indexing contains() method

我有一个简单的点 GeoDataFrames,就像这个:

        name        geometry
0       Location1   POINT (9.71852 50.56186)
1       Location2   POINT (9.72912 50.55847)

另一方面,我有一个更复杂的GeoDataFrame,它由多边形组成。我的目标是如果点在多边形区域内,则用其他 GDF 的一些信息更新点的 GDF。

所以我想使用 contains() 方法来检查哪些多边形包含一个点。我用一个简单的布尔掩码进行了测试:

mask = polygons.contains(points.loc[0,'geometry'])
selection = polygons.loc[mask]

显然,选择 returns 与第一行 GDF 点匹配的多边形。我想用类似的东西来考虑 GDF 的所有行:

mask = polygons.contains(points['geometry'])

这个掩码没有用,我猜这是一个索引问题,但我不知道如何解决它...

这实际上是现在预期的行为。 GeoSeries.contains 是 row-wise 操作,这意味着如果您执行 polygons.contains(point),它将首先对齐两个 GeoSeries,然后检查第 0 行上的多边形是否包含第 0 行上的点等

如果你想用多边形的数据更新点,你应该使用geopandas.sjoin - https://geopandas.readthedocs.io/en/latest/docs/user_guide/mergingdata.html#spatial-joins

在你的情况下,这可能看起来类似于:

points_with_data = geopandas.sjoin(points, polygons, how='left')