3 votos

Fusión de la geometría media de líneas superpuestas con nodos diferentes mediante QGIS

En QGIS 3.16 he heredado un conjunto de datos descuidado de carreteras regionales.

Mi problema es el siguiente:

enter image description here

Las carreteras se han dibujado por encima de las actualizaciones y no se han eliminado, dejando atrás cientos o miles de segmentos superpuestos que representan la misma calle, pero con vértices ligeramente diferentes.

Me encantaría encontrar una herramienta o escribir un código python que pueda iterar a través de cada segmento superpuesto y combinar los nodos, manteniendo la longitud total de los dos y promediando el desplazamiento entre ellos. Debido al número de estas instancias, la edición manual está fuera de la cuestión.

Lo he intentado:

  • Nodos Snap en QGIS - ningún cambio aparente
  • Combinar cadenas de líneas en QGIS (resumen = media) - sin cambio aparente

No creo que herramientas como la unión, la disolución, la fusión, etc. funcionen para las líneas incongruentes.

He estado tratando de encontrar un paquete de Python con una función que podría ayudar, pero estoy teniendo problemas con el lenguaje necesario para buscar para mis necesidades. La mayoría de los resultados son para líneas desplazadas pero por lo demás idénticas.

1voto

chhh Puntos 1154

La solución descrita para QGIS, debería funcionar de la misma manera con otros paquetes de software:

  1. Extraer los vértices de la línea 1.

  2. Para cada vértice, encuentra el punto más cercano de la línea 2 y conéctalo con una línea. Obtén el centroide de esa recta. Para ello, utiliza Geometría por expresión La capa de vértices como entrada y el tipo de geometría de salida como punto. Vea a continuación la expresión a utilizar.

  3. Conecte estos puntos mediante Señala el camino para crear la nueva línea media.

Expresión a utilizar para el paso 2 con Geometría por expresión :

centroid (
    make_line (
        $geometry, 
        closest_point( 
            collect_geometries ( 
                aggregate( 
                    'line2', 
                    'collect', 
                    $geometry
            )),
            $geometry
)))

Captura de pantalla: negro y azul punteado = líneas iniciales. Línea sólida roja = línea resultante. Puntos azules: vértices de la línea1, azul claro: línea hasta el punto más cercano de la línea2; puntos rojos: centroide de esta línea y vértices de la línea roja resultante:

enter image description here

1voto

yehe Puntos 130

Paso a paso: enter image description here

enter image description here

enter image description here

enter image description here

Sólo hay un problema, la interpolación no es muy precisa enter image description here

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