No necesitas un plugin. Todo está en la clase QgsPoint de PyQGIS
Si examinas el contenido de una clase de puntos QGIS con la función incorporada de Python dir() en la consola de Python.
dir(point])
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__'
, '__getitem__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__module__',
'__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__', 'azimuth',
'multiply', 'set', 'setX', 'setY', 'sqrDist', 'sqrDistToSegment', 'toDegreesMinutesSeconds', 'toString', 'wellKnownText', 'x', 'y']
Puedes ver que hay azimut y sqrDist funciones y después de unos pocos intentos:
- xy[0].azimuth(xy[1]) or xy[1].azimuth(xy[0]) gives the azimuth direction between two points(in degrees, +/- 180°)
- xy[0].sqrDist(xy[1]) give the square distance between two points (in the unit of the project)
El problema
Así que en la consola Python
def select_all(layer):
layer.select([])
layer.setSelectedFeatures([obj.id() for obj in layer])
myline = qgis.utils.iface.activeLayer()
select_all(myline)
for elem in myline.selectedFeatures():
xy = elem.geometry().asPolyline()
ahora xy contiene todos los nodos (puntos) de la línea
# first point
print "x=%2d y=%2d" % (xy[0].x(),xy[0].y())
x=112935 y=117784
# and others...
Usando todos los puntos de nodos de la línea:
1) punto de azimut i a punto i + 1 (+/- 180°) (nodos de una línea)
for i in range(len(xy)-1):
print "x=%2d y=%2d azim=%6.1f azim2=%6.1f" % (xy[i].x(), xy[i].y(), xy[i].azimuth(xy[i+1]), xy[i+1].azimuth(xy[i]))
x=112935 y=117784 azim= 168.4 azim2= -11.6
x=113032 y=117312 azim=-167.5 azim2= 12.5
x=112926 y=116835 azim= 177.3 azim2= -2.7
x=112943 y=116472 azim= 145.1 azim2= -34.9
[...]
2) distancia euclidiana entre el punto i y el punto i + 1
for i in range(len(xy)-1):
print "x=%2d y=%2d dist=%6.1f" % (xy[i].x(), xy[i].y(), xy[i].sqrDist(xy[i+1]))
x=112935 y=117784 dist=232533.9
x=113032 y=117311 dist=238243.6
x=112926 y=116835 dist=131839.8
x=112943 y=116472 dist=209268.1
[...]
Después, no es muy difícil añadir estos valores a la tabla de atributos.
Utilizo esta técnica para analizar los lineamientos (geología) con matplotlib y el plugin script Runner
0 votos
Hasta ahora puedo usar el plugin mmqgis para darme la distancia. Estoy explorando el problema de la dirección.
1 votos
¿Qué aspecto tienen los datos de las polilíneas? La distancia es relativamente fácil de calcular, pero el rumbo puede cambiar a lo largo de la polilínea. ¿Está buscando el rumbo desde punto de partida a punto final ?
0 votos
Sí, estoy buscando el rumbo desde el punto de partida hasta el punto final... gracias
1 votos
¿Quiere la distancia en línea recta desde el punto inicial hasta el punto final, o la longitud de la línea que sigue el camino de la línea? Esto puede variar mucho si el segmento de línea tiene curvas intermedias u otros cambios de dirección.