我有一个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个多边形,我想知道是否有更好的方法.感谢任何帮助!
我有两个地理数据框。一个包含点,另一个包含多边形。
我需要从 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)