Espero haber entendido bien su pregunta.
Supongamos que hay una capa "polygons"
con su correspondiente tabla de atributos en consecuencia, véase la imagen siguiente.
![input]()
Y, por supuesto, hay algunas lagunas o solapamientos.
![gaps_and_overlaps]()
A continuación sugiero un proceso paso a paso de cómo simplificar sólo el subconjunto de polígonos, manteniendo sin espacios o solapamientos entre dos polígonos resultantes adyacentes.
Paso 1. Divida su capa original en "bueno" y "malo" características. He utilizado 'Extract by expression'
Por ejemplo "id" IN (2,3)
y "id" NOT IN (2,3)
. Sin embargo, puede utilizar cualquier otra técnica disponible para separar sus características.
![step_1]()
Paso 2. Convertir polígonos en líneas con 'Polygons to lines'
.
![step_2]()
Paso 3. Aplicando 'Line intersections'
donde las líneas se cruzan entre sí. Además explotar 'Delete duplicate geometries'
.
![step_3]()
Paso 4. Continúe con 'Points to path'
.
![step_4]()
Paso 5. Aplicar 'Dissolve'
a su "malo" características.
![step_5]()
Paso 6. Utilice 'Delete holes'
![step_6]()
Paso 7. Aquí se trabaja con 'Split with lines'
entre el resultado de Paso 6 y Paso 4 .
![step_7]()
Paso 8. Debido a la inconsistencia de los atributos evocados en los pasos anteriores, se requieren algunos pasos adicionales sobre cómo lograr los atributos correctos. Probablemente extraeré los geocentroides del resultado del Paso 7 y, a continuación, aplique 'Join attributes by location'
y después un 'Join'
entre polígonos con geometrías correctas y puntos con atributos correctos.
Paso 9. Fusión "bueno" características con el resultado de Paso 8 a través de 'Merge vector layers'
. Y, por supuesto, un ajuste básico de los atributos es un plus.
![step_9]()
Si necesita líneas rectas para el paso Paso 4. entonces hay que aplicar un par de pasos más.
Paso 4.1. Disuelve tus caminos con 'Dissolve'
.
Paso 4.2. Obtención de una línea recta por medio de un "Virtual Layer"
a través de Layer > Add Layer > Add/Edit Virtual Layer...
aplicar esta consulta
SELECT setsrid(make_line(start_point(geometry), end_point(geometry)), #put your srid here)
FROM "Paths"
![step_42]()
Puede que haya mejores opciones con algoritmos de simplificación de líneas, aún no lo he comprobado.
P.D. En mi opinión, es mejor implementar este algoritmo en un modelador gráfico.
Referencias: