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

时间:2020-06-18 09:53:29

标签: python polygon shapefile

我有一个带有两层的shapefile(一组cpg,dbf,prj,shp和shx文件)。 L1代表城市的分区,L2代表特定的建筑物。

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

我的任务是创建一个数据帧,该数据帧将具有唯一对“ NAME / A_PSTCD”的列表。 为此,我需要将L1匹配为L2,然后提取相关字段。

尽管我对python有一定的经验,但我对shapefile还是很陌生。任何有关如何解决这一问题的建议将不胜感激

1 个答案:

答案 0 :(得分:0)

因此,我设法自己找到了解决方案:

1。导入库

import geopandas as gpd

2。加载建筑物文件

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

3。加载区域文件

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

4。查找建筑物质心

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

5。检查建筑物在哪个区域

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)

要获得一列,您将在其中具有该区域的名称。

相关问题