Проверить, какой многоугольник одного слоя содержит многоугольник другого слоя - PullRequest
0 голосов
/ 18 июня 2020

У меня есть шейп-файл с двумя слоями (наборы файлов cpg, dbf, prj, shp, shx). L1 представляет собой подобласть города, а L2 представляет определенные c здания.

Один из атрибутов L1 - это название подобласти (NAME). Одним из атрибутов L2 является почтовый адрес. код здания (A_PSTCD).

Моя задача - создать DataFrame, который будет иметь список уникальных пар «NAME / A_PSTCD». Для этого мне нужно сопоставить L1 с L2, а затем извлечь соответствующие поля.

Я новичок в шейп-файлах, хотя у меня есть некоторый опыт работы с python. Мы будем очень благодарны за любой совет о том, как подойти к этой проблеме

1 Ответ

0 голосов
/ 18 июня 2020

Итак, мне удалось найти решение самостоятельно:

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)

Чтобы получить единственный столбец, в котором будет указано название области.

...