4 votos

Fusión de segmentos de línea mediante reglas de longitud en QGIS 3

En QGIS 3 he dividido un conjunto de datos de líneas (conjunto de datos de carreteras en el que cada carretera es un segmento individual, es decir, dividido en las intersecciones) en segmentos utilizando la herramienta "Dividir líneas por longitud máxima" con la longitud máxima establecida en 100m. Hay una serie de segmentos (~1000) que miden menos de 20 m y que me gustaría fusionar con un segmento de línea vecino.

Por ejemplo, el segmento amarillo de abajo mide menos de 20 m, mientras que los segmentos vecinos miden 100 m. Los puntos representan los extremos de los segmentos lineales.

enter image description here

¿Cuál es la mejor manera de fusionar líneas de menos de 20 m con el segmento de línea vecino? Acepto que esto aumentará mi longitud máxima en 20 m en algunas zonas.

Tengo conocimientos muy limitados de python y utilizo sobre todo herramientas y plugins de QGIS y GRASS.

0voto

chhh Puntos 1154

Utilice Geometría por expresión ( Menu Processing / Toolbox / Geometry by expression ; para más información ) para crear una nueva capa de líneas con todas las características de línea menores/iguales a 20 m se fusionan con la característica vecina de la misma línea .

Ejecuta la herramienta:

  • Seleccione su capa de línea como Input layer
  • Line como Output geometry type
  • Inserte esta expresión como Geometry expression :

    if ( $length <= 20, union ( $geometry, eval ( 'overlay_nearest (''line'', $geometry, limit:=4, filter:=id= ' || id || ' and $id <> ' || $id || ' )[0]' ) ), $geometry )

Nota:

  • La expresión funciona para las versiones más recientes de QGIS, ver aquí .
  • Sus características de línea deben tener un identificador común (aquí llamado id ) que agrupa los rasgos que pertenecen a la misma línea para que quede claro a cuál de los rasgos vecinos deben conectarse los rasgos cortos. Este id no debe confundirse con $id - el identificador único de cada característica (segmento de línea de 100 metros o menos).
  • Sustituir line en la línea 6 con el nombre de su capa en dos comillas simples '' ( no comillas dobles " ).
  • Para eliminar las líneas superpuestas en la salida, utilice Seleccionar por expresión con esta expresión overlay_within( @layer) y elimine la(s) característica(s) seleccionada(s).

3 líneas con su id, etiquetadas encima de la línea: 1 (naranja, de izquierda a centro), 2 (azul, de arriba a centro) y 3 (rosa, de derecha a centro). Cada característica (línea individual) está etiquetada debajo de la línea con el id $id (aquí llamado fid ) y la longitud. Las pequeñas líneas verdes indican los puntos inicial y final tras el flujo de trabajo. Las líneas fusionadas (aquí líneas <=70) son de la línea 1: fid 21+22; de la línea 2: fid 16+17; de la línea 3: fid 5+6: enter image description here

Las líneas naranjas, azules y rosas se han creado con una expresión ligeramente modificada para su visualización con el generador Geometry. Los segmentos cortos (aquí: <=90) se conectan al segmento vecino más próximo con el mismo id pero diferente $id . Los círculos blancos con punto negro son los puntos inicial y final de las líneas de color:

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