相关疑难解决方法(0)

geopandas指向多边形

我有一个GeoDataFrame的多边形(~30)和一个GeoDataFrame的点(~10k)

我想在我的GeoDataFrame中创建30个新的列(具有适当的多边形名称),如果该点存在于多边形中,则使用简单的布尔值True/False.

例如,多边形的GeoDataFrame是这样的:

id  geometry
foo POLYGON ((-0.18353,51.51022, -0.18421,51.50767, -0.18253,51.50744, -0.1794,51.50914))
bar POLYGON ((-0.17003,51.50739, -0.16904,51.50604, -0.16488,51.50615, -0.1613,51.5091))
Run Code Online (Sandbox Code Playgroud)

Points的GeoDataFrame是这样的:

counter     points
   1     ((-0.17987,51.50974))
   2     ((-0.16507,51.50925))
Run Code Online (Sandbox Code Playgroud)

预期产量:

counter          points        foo    bar
   1    ((-0.17987,51.50974))  False  False
   1    ((-0.16507,51.50925))  False  False
Run Code Online (Sandbox Code Playgroud)

我可以通过以下方式手动完成:

foo = df_poly.loc[df_poly.id=='foo']
df_points['foo'] = df_points['points'].map(lambda x: True if foo.contains(x).any()==True else False
Run Code Online (Sandbox Code Playgroud)

但鉴于我有30个多边形,我想知道是否有更好的方法.感谢任何帮助!

python point-in-polygon pandas geopandas

10
推荐指数
1
解决办法
8164
查看次数

如何获取 GeoDataFrame 中多边形内的所有点?

我有两个地理数据框。一个包含点,另一个包含多边形。

我需要从 GeoDataFrame 获取任何多边形内的所有点。

我尝试迭代所有多边形并检查点是否位于该多边形内。该解决方案有效,但速度非常慢。

我想知道是否有其他方法来解决这个任务。

编辑:我的解决方案如下所示:

for i in range(len(Poly_gdf.index)):
    inter = Points_gdf[Points_gdf.intersects(Poly_gdf.loc[i,'geometry'])]
    if not inter.empty:
        for i in inter['geometry'].values:
            points.append(i)
Run Code Online (Sandbox Code Playgroud)

python geometry shapely geopandas

3
推荐指数
1
解决办法
4784
查看次数

标签 统计

geopandas ×2

python ×2

geometry ×1

pandas ×1

point-in-polygon ×1

shapely ×1