4 votos

Crear línea a partir de puntos

Tengo esta imagen NDVI de eucaliptos. Ya he podido aislar los árboles y extraer la ubicación.

NDVI

Luego creé la triangulación delaunay, la convertí en líneas, y luego exploté para separar las líneas y eliminé los duplicados.

Lo que quiero es poder unir estos trozos de líneas para que formen una línea en la misma dirección. Como está en amarillo en la imagen de abajo. Necesito hacer esto para toda la imagen.

enter image description here

¡Lo hice usando QGIS pero cualquier ayuda usando GRASS, SAGA, Postgis, python, etc, es bienvenida!

4voto

Jakub P. Puntos 126

El proceso podría dividirse en dos partes

  • Seleccione las líneas que formarán las polilíneas (elimine las líneas innecesarias).
  • Forma las polilíneas.

La primera parte es la más delicada:
Es necesario crear una condición (o varias), que debe poder formalizarse matemáticamente en términos de teoría de conjuntos, y que decidirá si una línea debe ser seleccionada o no.

El enfoque más práctico, aunque probablemente el menos sólido, es que la condición se establezca en términos de rangos de acimut que la geometría debe tener para ser seleccionada.

Presento un ejemplo de un conjunto de líneas trazadas a propósito para esta respuesta, que fueron etiquetadas con su acimut correspondiente. Las etiquetas se basan en la expresión round( degrees( azimuth( start_point( $geometry), end_point( $geometry))), 1) .

Se seleccionan dos líneas conflictivas:

all-the-lines

Evidentemente, el acimut depende de la dirección (hacia delante o hacia atrás) en la que se hayan digitalizado. Así que la condición se establecerá sobre rangos de acimut opuestos.

Si se puede establecer una condición basada en rangos de acimut para toda (o casi toda) la imagen, pensaría que algunas líneas conflictivas que se seleccionen en primera instancia no serían un problema, ya que sería relativamente fácil eliminarlas manualmente después.

En mi caso, como no quiero seleccionar la línea de acimut 171,9, uno de los bordes de mis rangos será de 170 grados (y su opuesto 350). El otro borde lo elegí ancho porque no vi ningún inconveniente (100 grados y su opuesto 280).

Los rangos más bajos serían más restrictivos, pero preferiría elegir más líneas (y luego eliminarlas), pero que todas las líneas que me interesan estén seleccionadas. Igualmente, en algunas iteraciones por ensayo y error, se puede determinar un rango conveniente. Además, ¿qué condición podría imponer para que la línea de 179,1 grados de acimut no fuera seleccionada si estuviera dentro de mi rango? Por supuesto que hay una respuesta, pero no la conozco.

He seleccionado por la expresión:

(
    ( ( azimuth( start_point ( $geometry), end_point( $geometry))) >= ( radians( 100)))
    AND
    ( ( azimuth( start_point ( $geometry), end_point( $geometry))) <= ( radians( 170)))
)
OR
(
    ( ( azimuth( start_point ( $geometry), end_point( $geometry))) >= ( radians( 280)))
    AND
    ( ( azimuth( start_point ( $geometry), end_point( $geometry))) <= ( radians( 350)))
)  

Y exportar las características seleccionadas como una nueva capa.

selected-lines


Formar polilíneas es mucho más sencillo ahora.

Tenga en cuenta que las polilíneas deben ser topológicamente correcto . Cada línea debe comenzar en el punto exacto en el que termina otra. Por su procedimiento expuesto en la pregunta no tengo ninguna duda de que esto es así. Pero si es necesario, deberías limpiarlas primero con v.limpiar .

Las polilíneas se forman con v.construir.polilíneas .

Ambas herramientas de GRASS están integradas en QGIS.

Si ha quedado alguna línea no deseada (no ha sido eliminada antes de construir las polilíneas), entonces tres líneas saldrán de un nodo, y la interpretación correcta de la topología es que habrá tres polilíneas diferentes que comparten ese nodo.

Si es así, elimine la línea (o polilínea) no deseada y reconstruya.

0 votos

Gracias. Me ha ayudado mucho, ¡es lo que buscaba!

0 votos

@hugonbg, de nada. Me alegro de que te haya servido de ayuda.

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