2 votos

Combinar varios polígonos en uno solo (con agujeros)

Tengo el siguiente GeoDataFrame con múltiples polígonos que representa una única área ( raster_val = 1.0 ) con agujeros en el centro ( raster_val = NaN ):

                                       geometry           raster_val
0   POLYGON ((8.77500 47.70000, 8.77500 47.67500, ...         NaN
1   POLYGON ((8.90000 47.40000, 8.90000 47.30000, ...         NaN
...
9   POLYGON ((6.12500 46.27500, 6.12500 46.25000, ...         1.0
10  POLYGON ((8.57500 47.80000, 8.57500 47.77500, ...         1.0
11  POLYGON ((8.90000 45.85000, 8.90000 45.82500, ...         1.0

Me gustaría combinar polígonos correspondientes a raster_val = 1.0 en un único Polígono/Multipolígono pero conservando los huecos indicados por los polígonos con raster_val = NaN .

Ya he probado las geopandas dissolve() método:

polygons = polygons.dissolve(by='raster_val')

Esto combina raster_val = 1.0 polígonos pero ignora todos raster_val = NaN para que el multipolígono combinado no tenga agujeros. ¿Tiene alguna sugerencia sobre cómo incluir esos NaN ¿agujeros?

2voto

Dragos Puntos 6

Tal vez shapely's unión_unaria ayudará, donde df es su GeoDataFrame:

import pandas as pd
from shapely.ops import unary_union

hole_indx = pd.isna(df.raster_val)

holes = unary_union(df.loc[hole_indx, 'geometry'])
polys = unary_union(df.loc[~hole_indx, 'geometry'])

polys_and_holes = polys.difference(holes)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X