¿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.

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')


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)

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.