Longitud de segmentos de recta en una polilínea mediante PyQGIS

En el post anterior se consideró la determinación de una matriz de distancias correspondiente a un vectorial de puntos. Modificando ese código es posible adaptarlo para determinar la longitud de los segmentos de recta en una polilínea para todos sus rasgos (features) y, por tanto, determinar la longitud total de cada línea. Si se aplica a una curva cerrada esta suma corresponde al perímetro. El código modificado fue el siguiente:

from math import sqrt
import itertools

layer = iface.activeLayer()

features = layer.getFeatures()

lines = [feature.geometry().asPolyline() for feature in features]

k = 0

for points in lines:
    
    n = len(points)
    list = range(n)
    print "line" + str(k) + ", " + str(n) + " points" 
    
    length_segments = [sqrt(points[i].sqrDist(points[j])) 
           for i,j in itertools.combinations(list, 2) 
           if (j - i) == 1]
    
    sum = 0
    
    for length in length_segments:
        i = length_segments.index(length)
        print "segment = %d, length = %.2f" % (i, length)
        sum += length
    
    print "sum = ", sum
    
    k += 1

Cuando se ejecuta en la Python Console para el vectorial de la imagen a continuación:

line1

se obtiene lo siguiente:

line0, 4 points
segment = 0, length = 21735.11
segment = 1, length = 20208.88
segment = 2, length = 38158.48
sum =  80102.4682351
line1, 7 points
segment = 0, length = 18831.03
segment = 1, length = 50481.12
segment = 2, length = 30119.61
segment = 3, length = 26176.50
segment = 4, length = 47111.79
segment = 5, length = 21697.58
sum =  194417.62525
line2, 5 points
segment = 0, length = 23266.31
segment = 1, length = 21186.16
segment = 2, length = 23595.18
segment = 3, length = 25817.39
sum =  93865.0436374

Con estos resultados se pueden identificar claramente a que features de la imagen corresponden. Por otra parte, cuando se ejecuta el código anterior para el vectorial de la imagen siguiente (que son líneas cerradas en cada feature):

linea2

se obtiene:

line0, 7 points
segment = 0, length = 9464.23
segment = 1, length = 13438.33
segment = 2, length = 11948.12
segment = 3, length = 10630.16
segment = 4, length = 10285.43
segment = 5, length = 10162.14
sum =  65928.4046506
line1, 6 points
segment = 0, length = 6912.03
segment = 1, length = 12869.95
segment = 2, length = 11713.25
segment = 3, length = 25338.68
segment = 4, length = 9858.74
sum =  66692.6486107

La suma de los segmentos de recta resulta ser idéntica al campo perimeter que se encuentra en la tabla atributiva del vectorial.

El código aquí propuesto es fácilmente adaptable a una función que puede convertirse en pocos minutos en plugin; tal como se expone en la imagen a continuación:

linea3

Lo que aparece en la ventana de la QTextBrowser es la información que corresponde al vectorial cuyos features son líneas cerradas.

En nuestro curso de PyQGIS aprenderás el desarrollo de éste y otros plugins mediante el empleo de ‘Plugin Builder’.

PRÓXIMA SESIÓN EL 20 DE OCTUBRE

Esta entrada fue publicada en PyQGIS, QGIS, SIG, Software Libre. Guarda el enlace permanente.

3 respuestas a Longitud de segmentos de recta en una polilínea mediante PyQGIS

  1. Pingback: Listas por comprensión en PyQGIS | El Blog de José Guerrero

  2. Pingback: Número de inflexiones (bends) de una polilínea mediante PyQGIS | El Blog de José Guerrero

  3. Pingback: Newsletter Octubre 2015 | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s