检查一层的哪个多边形包含另一层的多边形

Check which polygon of one layer contains a polygon in another layer

我有一个两层的 shapefile(cpg、dbf、prj、shp、shx 文件集)。 L1代表一个城市的分区,L2代表具体的建筑物。

L1的其中一个属性是子区域的名称(NAME) L2 的属性之一是建筑物的邮政编码 (A_PSTCD)。

我的任务是创建一个包含唯一对列表的 DataFrame "NAME/A_PSTCD"。 为此,我需要将 L1 匹配到 L2,然后提取相关字段。

虽然我对 python 有一些经验,但我对 shapefile 还很陌生。非常感谢有关如何解决此问题的任何建议

所以,我设法自己找到了解决方案:

1.Import 图书馆

import geopandas as gpd

2.Load 建筑物文件

buildings_polys = gpd.read_file('.../buildings.shp')

3.Load 区域文件

polygons_areas = gpd.read_file('.../areas.shp')

4.Find 建筑物质心

buildings_points = buildings_polys.copy()
buildings_points['geometry'] = buildings_points['geometry'].centroid

5.Check建筑物在哪个区域

i = 0
for area in areas:
    i+=1
    print('{} of {}'.format(i, len(areas)), area)
    buildings_points[area] = np.where(buildings_points['geometry'].within(dictionary[area]), 1, 0)

这将创建一个建筑物数据框,其中包含一堆列(区域的完整列表),根据建筑物是否位于该区域,这些列的值为 1 或 0。

你也可以做类似的事情(而不是第 5 步中的最后一行:

buildings_points['area_of_building'] = np.where(buildings_points['geometry'].within(dictionary[area]), area, 0)

要获得包含区域名称的单列。