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

我有一个简单的点地理数据框架,如下所示:


        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]

显然,选择返回一个与第一行 GDF 点匹配的多边形。我想考虑 GDF 的所有行,例如:


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

这个面具不起作用,我猜这是一个索引问题,但我不知道如何修复它......


冉冉说
浏览 166回答 1
1回答

长风秋雁

现在这实际上是预期的行为。GeoSeries.contains是按行操作,这意味着如果您这样做polygons.contains(point),它将首先对齐两个 GeoSeries,然后检查第 0 行上的多边形是否包含第 0 行上的点等。在你的情况下,这可能看起来类似于:points_with_data = geopandas.sjoin(points, polygons, how='left')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python