20 votos

Distancia más cercana entre capas de puntos y líneas en QGIS

Tengo dos capas, una de líneas y otra de puntos.

Necesito hacer una capa de línea que conecte todos los puntos con la característica de línea más cercana. ¿Cómo puedo hacerlo?

¿Existe un plugin para QGIS? Esta es una herramienta muy importante que falta en QGIS.

ArcView dispone de esta herramienta: "Características más cercanas"

26voto

Mue Puntos 2469

Como alternativa, podrías:

  1. Utilice la Convertir líneas en puntos herramienta de:

    Caja de herramientas de edición > SAGA > Formas - Puntos > Convertir líneas en puntos

    (Añade puntos en distancias pequeñas. Por ejemplo, añade un punto cada 1 m si la línea total es de 100 m).

    Convert lines to points

  2. Utilice la Distancia al nudo más cercano de:

    Caja de herramientas de procesamiento > Geoalgoritmos QGIS > Herramientas de análisis vectorial > Distancia al centro más cercano

    (Establecer los parámetros, utilizando la capa de salida de la Convertir líneas en puntos herramienta como el Capa de nodos de destino y estableciendo el Tipo de forma de salida como Línea al centro )

    Distance to nearest hub

  3. El resultado final debe ser una capa de línea que conecte la capa de puntos original con la capa de línea original (con puntos convertidos a línea):

    Final result with points

    (sin puntos convertidos en línea):

    Final result without points

He utilizado QGIS 2.12.3-Lyon.

10voto

ARUNBALAN NV Puntos 101

En QGIS puedo sugerir el uso de "Capa virtual" a través de Layer > Add Layer > Add/Edit Virtual Layer... .

Supongamos que tenemos dos capas puntos y río con sus correspondientes tablas de atributos, véase la imagen siguiente.

input

Con la siguiente consulta, es posible crear nuevas líneas que representarán la conexión entre puntos con las características de línea más cercanas.

SELECT
    ST_ShortestLine(r.geometry, p.geometry),
    p.id AS pid,
    r.id AS rid,
    ROUND(ST_Length(ST_ShortestLine(r.geometry, p.geometry)), 6) AS distance
FROM
    points AS p, river AS r
WHERE
    distance < 0.5
GROUP BY
    p.id
ORDER BY
    MIN(distance)

Nota:

  • WHERE distance < 0.5 especifica la mayor distancia aceptable entre el punto y la característica de línea

La capa virtual de salida con su tabla de atributos tendrá el siguiente aspecto

output

2voto

mins Puntos 477

El punto más cercano hace lo que buscas, actualmente limitado sólo a determinadas funciones. Usted puede echar un vistazo al código y modificarlo para sus necesidades

2voto

chhh Puntos 1154

Mientras tanto (desde QGIS 3.16), existe el nuevo overlay_nearest() que puede utilizar para ello con las expresiones de QGIS. Para cada punto, 1) obtener la línea más cercana con overlay_nearest() , 2) obtener el punto de esta recta más próximo al punto mediante closest_point() .

La expresión que debe utilizarse con Generador de geometría o Geometría por expresión ( consulte aquí los detalles ):

make_line (
    $geometry,
    closest_point (
        overlay_nearest ('line', $geometry)[0],
        $geometry
    )
)
  • Sustituir line en la línea 4 con el nombre de su capa de línea.

Las líneas discontinuas para conectar los puntos a las líneas más cercanas se crean con la expresión anterior:

enter image description here

-1voto

Christian Puntos 109

Si encuentras el punto sobre la línea, el punto más corto, con la coordenada 3D (X,Y,Z) necesitas un algoritmo para calcular la posición sobre la línea más corta. Puede utilizar esta herramienta https://github.com/rafaelduartenom/findpointonline . Se necesita postgres para ejecutar esta herramienta y shapefiles.

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