martes, 26 de septiembre de 2017

Determinación de la sinuosidad de una línea con PyQGIS Processing

La sinuosidad de una línea se define como el cociente de su distancia total y la distancia euclidiana entre su punto de comienzo y su punto final; tal como se ejemplifica aquí. En el link anterior también se señala como soslayar el inconveniente de acceder al resultado de un commando de GRASS (v.to.db; option=sinuous), imposible directamente a través de Processing, pero si a través del 'fieldcalculator' de QGIS (y por ende de PyQGIS Processing).

El código que se presenta a continuación fue ligeramente modificado para permitir la carga directa de la capa resultante en un sólo paso mediante el método 'runandload'.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import processing

lines = iface.activeLayer()

processing.runandload('qgis:fieldcalculator',
                      {"INPUT_LAYER": lines,
                      "FIELD_NAME": "sinuosity",
                      "FIELD_TYPE": 0,
                      "FORMULA": '$length / sqrt((xat(-1) - xat(0))^2 + (yat(-1) - yat(0))^2)',
                      "NEW_FIELD": True,
                      "OUTPUT_LAYER": None})

Después de ejecutado en la Python Console de QGIS, con la line layer de la imagen siguiente, se obtiene el resultado a continuación:


Los rasgos seleccionados en la tabla de atributos permiten apreciar como varia la sinuosidad en función de cuan recta es la línea y cuan juntos están sus extremos.

No hay comentarios: