Объединение шейп-файлов в Python / GeoPandas - PullRequest
0 голосов
/ 05 июля 2019

У меня есть три многоугольных шейп-файла, которые перекрывают друг друга.Давайте назовем их:

  • file_one.shp (имя многоугольника 1)
  • file_two.shp (имя многоугольника 2)
  • file_three.shp (имя многоугольника is3)

Я хочу объединить их и сохранить такие значения.

enter image description here

Как мне достичь результата(Как показано на рисунке) в Python, пожалуйста?

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 июля 2019

Сначала давайте сгенерируем некоторые данные для демонстрации:

import geopandas as gpd
from shapely.geometry import Point
shp1 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(3)], 'name': ['Shape 1']})
shp2 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(2)], 'name': ['Shape 2']})
shp3 = gpd.GeoDataFrame({'geometry': [Point(1, 1).buffer(1)], 'name': ['Shape 3']})

Теперь возьмем симметричную разность для всех, но наименьшую форму, которую можно оставить как:

diffs = []
gdfs = [shp1, shp2, shp3]
for idx, gdf in enumerate(gdfs):
    if idx < 2:
        diffs.append(gdf.symmetric_difference(gdfs[idx+1]).iloc[0])
diffs.append(shp3.iloc[0].geometry)

Итак, теперь у вас есть нужные фигуры в виде списка в diffs. Если вы хотите объединить их в один GeoDataFrame, просто сделайте следующее:

all_shapes = gpd.GeoDataFrame(geometry=diffs)
0 голосов
/ 18 июля 2019

Если вы хотите просто создать один шейп-файл из файлов, которые вы упомянули, вы можете попробовать следующий код (я предполагаю, что шейп-файлы имеют одинаковые столбцы).

import pandas as pd
import geopandas as gpd

gdf1 = gpd.read_file('file_one.shp')
gdf2 = gpd.read_file('file_two.shp')
gdf3 = gpd.read_file('file_three.shp')

gdf = gpd.GeoDataFrame(pd.concat([gdf1, gdf2, gdf3]))
...