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.
fuente
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.
El GeoDataFrame
import geopandas as gpd
g1 = gpd.GeoDataFrame.from_file("poly_intersect.shp")
g1.shape
(4, 3)
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")
Unión
union_iter = intersection_iter.unary_union
b) Si desea fusionar los polígonos intersectados cambie intersection
por union
(todos los polígonos se superponen en mi ejemplo)
2) Puedes usar GeoPandas Overlay
una)
auto_inter = gpd.overlay(g1, g1, how='intersection')
auto_inter.shape
(7,4)
El GeoDataframe resultante
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")
Unión
union = intersection.unary_union
b) uso gpd.overlay(g1, g1, how='union')
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)