Matriz de distancias utilizando PyQGIS

Obtener la matriz de distancias para vectoriales de puntos utilizando PyQGIS es bastante sencillo; sobretodo si lo combinamos con la librería itertools que permite optimizar las iteraciones seleccionando sólo la porción correspondiente a la matriz triangular superior (evitando los resultados repetidos).

Por otra parte, si empleamos listas por comprensión, en lugar de las “clásicas”, se puede hacer más compacto el código porque se ahorra la declaración de la lista y el ‘append’ correspondiente. Ésto es lo que se propone a continuación:

from math import sqrt
import itertools

layer = iface.activeLayer()

features = layer.getFeatures()

points = [feature.geometry().asPoint() 
          for feature in features]

n = len(points)

list = range(n)

for i,j in itertools.combinations(list, 2):
    print i, j, sqrt(points[i].sqrDist(points[j]))

Cuando se ejecuta el codigo anterior en la Python Console para el vectorial de la imagen siguiente:

matrix1

se obtiene este resultado:

0 1 28415.4381005
0 2 48380.9487158
0 3 63608.9197655
0 4 44111.1282702
0 5 19609.1738225
1 2 27252.6459011
1 3 47850.7529946
1 4 37821.6827176
1 5 27147.7980092
2 3 21588.551469
2 4 23663.3870275
2 5 34764.3290912
3 4 23048.9959669
3 5 45857.2099628
4 5 24822.4756566

Los índices (i, j) impresos dan cuenta de la distancia entre los puntos cuyo id se corresponde. El uso de la librería itertools excluye automáticamente las distancias repetidas como, por ejemplo, las de índices (i=1, j=0) o (i=3, j=1) que son respectivamente iguales a las de índices (i=0, j=1) y (i=1, j=3).

Por otra parte, si colocamos en forma de función el código anterior y lo usamos para crear un plugin de QGIS mediante el ‘Plugin Builder’, se puede obtener el resultado siguiente:

matrix2

En nuestro curso de PyQGIS aprenderás con detalle 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.

4 respuestas a Matriz de distancias utilizando PyQGIS

  1. Pingback: Longitud de segmentos de recta en una polilínea mediante PyQGIS | El Blog de José Guerrero

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

  3. Pingback: Interpolación IDW (ponderada por el inverso de la distancia) en PyQGIS | El Blog de José Guerrero

  4. 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