检查一层的哪个多边形包含另一层的多边形
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)
要获得包含区域名称的单列。