在python中选择与目标多边形共享边界的多边形,最好使用GeoPandas

2024-09-29 23:17:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个GeoDataFrame作为gdf。我想选择与id为4的目标几何体接触的多边形。但是,当我使用GeoPandas的touches()时,它会吐出共享边界的几何体以及仅接触目标几何体一角的几何体(id为4)。我在GeoPandas intersects()上也运气不好,因此它生成了touches()生成的所有几何体,包括目标几何体

我只想选择那些实际上与目标(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])]

gdf


Tags: importid目标code多边形边界geopandasgeometry
1条回答
网友
1楼 · 发布于 2024-09-29 23:17:16

您可以使用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')

相关问题 更多 >

    热门问题