¿Fusionar características superpuestas con Geopandas?

8

Tengo un Shapefile con características superpuestas. ¿Hay una manera fácil de fusionarlos con geopandas?

Encontré una forma con bien proporcionado, pero me gustaría hacerlo con geopandas directamente.

Mehdi.Sqalli
fuente

Respuestas:

10

El GeoDataFrame

import geopandas as gpd
g1 = gpd.GeoDataFrame.from_file("poly_intersect.shp")
g1.shape
(4, 3)

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

1) Puedes usar el módulo itertools

a) Si desea fusionar las intersecciones de los polígonos superpuestos

import itertools
geoms = g1['geometry'].tolist()
intersection_iter = gpd.GeoDataFrame(gpd.GeoSeries([poly[0].intersection(poly[1]) for poly in  itertools.combinations(geoms, 2) if poly[0].intersects(poly[1])]), columns=['geometry'])
intersection_iter.to_file("intersection_iter.shp") 

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Unión

union_iter = intersection_iter.unary_union

b) Si desea fusionar los polígonos intersectados cambie intersectionpor union(todos los polígonos se superponen en mi ejemplo)

ingrese la descripción de la imagen aquí

2) Puedes usar GeoPandas Overlay

una)

auto_inter = gpd.overlay(g1, g1, how='intersection')
auto_inter.shape
(7,4)

El GeoDataframe resultante

ingrese la descripción de la imagen aquí

GeoPandas agrega las geometrías de intersección a las geometrías existentes, por lo tanto

intersection = auto_inter[4:7]
intersection.to_file("intersection.shp") 

ingrese la descripción de la imagen aquí

Unión

union = intersection.unary_union

b) uso gpd.overlay(g1, g1, how='union')

gene
fuente
1

Si desea generar una capa de polígonos superpuestos combinados distintos, y no solo un solo polígono múltiple, luego de usar:

union = intersection.unary_union

Puede convertir el Multi-Poly resultante en un GeoSeries:

shapes_series = gpd.GeoSeries([polygon for polygon in union])

o a un GeoDataFrame:

shapes_df = gpd.GeoDataFrame([polygon for polygon in union]).set_geometry(0)
Pawel Kranzberg
fuente
Probablemente debería ser una edición de la primera respuesta en lugar de una respuesta en sí misma
nmtoken
Gracias por el consejo, pero terminaría reelaborando la respuesta del gen, y no vale la pena el esfuerzo. Tampoco pude agregar un comentario ya que mi representante está por debajo de 50.
Pawel Kranzberg