在python中选择与目标多边形共享边界的多边形,最好使用GeoPandas
我有一个GeoDataFrame作为在python中选择与目标多边形共享边界的多边形,最好使用GeoPandas,python,geopandas,shapely,Python,Geopandas,Shapely,我有一个GeoDataFrame作为gdf。我想选择与id为4的目标几何体接触的多边形。但是,当我使用GeoPandas的touchs()时,它会吐出共享边界的几何体以及仅接触目标几何体一角的几何体(id为4)。我的GeoPandasintersects()也运气不好,因此它生成了touch()生成的所有几何体,包括目标几何体 我只想选择那些实际上与目标(id 4)共享边界的几何体,这样输出将仅是id为(3,7,5,1)的几何体。 code: import geopandas as gpd gd
gdf
。我想选择与id为4的目标几何体接触的多边形。但是,当我使用GeoPandas的touchs()
时,它会吐出共享边界的几何体以及仅接触目标几何体一角的几何体(id为4)。我的GeoPandasintersects()
也运气不好,因此它生成了touch()
生成的所有几何体,包括目标几何体
我只想选择那些实际上与目标(id 4)共享边界的几何体,这样输出将仅是id为(3,7,5,1)的几何体。
code:
import geopandas as gpd
gdf = ,Id,geometry
0,0,"POLYGON ((-2247824.100899419 -4996167.43201861, -2247824.100899419 -4996067.43201861, -2247724.100899419 -4996067.43201861, -2247724.100899419 -4996167.43201861, -2247824.100899419 -4996167.43201861))"
1,0,"POLYGON ((-2247724.100899419 -4996167.43201861, -2247724.100899419 -4996067.43201861, -2247624.100899419 -4996067.43201861, -2247624.100899419 -4996167.43201861, -2247724.100899419 -4996167.43201861))"
2,0,"POLYGON ((-2247624.100899419 -4996167.43201861, -2247624.100899419 -4996067.43201861, -2247524.100899419 -4996067.43201861, -2247524.100899419 -4996167.43201861, -2247624.100899419 -4996167.43201861))"
3,0,"POLYGON ((-2247824.100899419 -4996067.43201861, -2247824.100899419 -4995967.43201861, -2247724.100899419 -4995967.43201861, -2247724.100899419 -4996067.43201861, -2247824.100899419 -4996067.43201861))"
4,0,"POLYGON ((-2247724.100899419 -4996067.43201861, -2247724.100899419 -4995967.43201861, -2247624.100899419 -4995967.43201861, -2247624.100899419 -4996067.43201861, -2247724.100899419 -4996067.43201861))"
5,0,"POLYGON ((-2247624.100899419 -4996067.43201861, -2247624.100899419 -4995967.43201861, -2247524.100899419 -4995967.43201861, -2247524.100899419 -4996067.43201861, -2247624.100899419 -4996067.43201861))"
6,0,"POLYGON ((-2247824.100899419 -4995967.43201861, -2247824.100899419 -4995867.43201861, -2247724.100899419 -4995867.43201861, -2247724.100899419 -4995967.43201861, -2247824.100899419 -4995967.43201861))"
7,0,"POLYGON ((-2247724.100899419 -4995967.43201861, -2247724.100899419 -4995867.43201861, -2247624.100899419 -4995867.43201861, -2247624.100899419 -4995967.43201861, -2247724.100899419 -4995967.43201861))"
8,0,"POLYGON ((-2247624.100899419 -4995967.43201861, -2247624.100899419 -4995867.43201861, -2247524.100899419 -4995867.43201861, -2247524.100899419 -4995967.43201861, -2247624.100899419 -4995967.43201861))"
shares_boundary = gdf[gdf.geometry.touches(gdf['geometry'][4])]
您可以使用shapely方法编写函数,实现您的逻辑,如下所示:
def share_boundary(geom1, geom2):
if geom1.touches(geom2):
if not isinstance(geom1.intersection(geom2), Point):
return True
return False
然后使用apply
将其应用于几何体列:
result = gdf[gdf.geometry.apply(lambda x: share_boundary(x, gdf['geometry'][4]))]
print(result.index) # Int64Index([1, 3, 5, 7], dtype='int64')