6 votos

¿El método más rápido de QGIS para calcular la distancia entre varios puntos en una capa?

Usando Qgis 2.18.3, estoy buscando el método más rápido para calcular la distancia agregada entre múltiples puntos. Como el cuervo vuela sería suficiente...

Tengo una capa de puntos en un área pequeña. Tienen ID's únicos e incrementados. (en mi caso son paradas de un camión)

Estaba usando el plugin Points to path para crear líneas. Luego usando $length para calcular la longitud y luego la estadística básica para agregar la longitud. Podría construir un modelo para automatizar esto un poco. La cosa es que tengo cientos de esas capas de puntos separadas...

¿Hay algún otro método que sea más rápido?

4voto

Chris Smith Puntos 2858

También podrías hacer un shell script para todos tus archivos y así no tener que esperar a que QGIS esté listo. En este ejemplo los puntos son archivos shape y saga_cmd y ogr2ogr se utiliza.

#!/bin/sh

for i in *.shp

do
    f=$(echo $i| cut -d'.' -f 1) 
    saga_cmd shapes_lines 1 -LINES ${f}_line.shp -POINTS ${f}
    ogrinfo ${f}_line.shp -sql "ALTER TABLE ${f}_line ADD COLUMN length integer(5)"
    ogrinfo ${f}_line.shp -dialect SQLite -sql "UPDATE ${f}_line SET length = ST_Length(geometry)"
done

Entonces obtendrá un archivo de forma de polilínea para cada archivo de puntos con una nueva columna que muestra la longitud de la línea. También puede añadir opciones a saga_cmd con el orden de los puntos, etc.

3voto

Mue Puntos 2469

Puede crear un custom script (o un modelo pero yo prefiero script) que ejecuta el Field Calculator y el Convert points to lines para crear una salida de una sola línea que une todos los puntos con un Longitud que contiene la longitud agregada.

Puedes crear uno de:

Processing Toolbox > Scripts > Tools > Create new script

Entonces usa algo como lo siguiente:

##Example=name
##Point_layer=vector point
##ID_Field=Field Point_layer
##Result=output vector

output_fieldCalculator = processing.runalg("qgis:fieldcalculator", Point_layer, 'Separate', 1, 10, 0, True, '1', None)
output_pointToLine = processing.runalg("saga:convertpointstolines", output_fieldCalculator['OUTPUT_LAYER'], ID_Field, "Separate", None)
output_fieldLength = processing.runalg("qgis:fieldcalculator", output_pointToLine['LINES'], 'Length', 0, 10, 2, True, '$length', Result)

Asegúrese de guardar el script en su /.qgis2/processing/scripts directorio.


Ejemplo:

Cuando se ejecuta el script, se puede seleccionar la capa de puntos y el campo ID:

Script

Resultado:

Example


Nota: El campo "Separado" sólo se utiliza para que la herramienta SAGA cree la línea correctamente.

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