Añadiendo y borrando vértices mediante PyQGIS

Añadir y borrar vértices mediante PyQGIS es muy sencillo. Se requiere, en una sesión de edición, usar respectivamente los métodos ‘insertVertex’ y ‘deleteVertex’ de la clase QgsVectorLayer. En el caso de ‘insertVertex’, se le pasan como argumentos las coordenadas del punto a insertar, el id del rasgo y el id del vértice antes del cual se quiere insertar el punto. En el caso de ‘deleteVertex’ sólo hay que suministrar los ids, respectivamente, del feature y del vértice.

En la imagen a continuación se tiene un shapefile tipo polilínea que contiene un sólo rasgo; pero con 8 vértices. Se desea incorporar un vértice adicional, correspondiente al punto (416781.947501, 4451209.75911), antes del vértice con id igual a 5 (vértice 6).

line1

El código siguiente permite realizar el proceso imprimiendo, adicionalmente, las coordenadas de los puntos para corroborar que el vértice añadido pasa a tener el índice 5 en el feature 0.

#testing with route_multi_features.shp

layer = iface.activeLayer()

layer.startEditing()

print layer.insertVertex(416781.947501, 4451209.75911, 0, 5)

layer.commitChanges()

feats = [ feat for feat in layer.getFeatures() ]

line = [ feat.geometry().asPolyline() for feat in feats ]

for i, item in enumerate(line[0]):
   print i, item[0], item[1] 

El resultado es el siguiente:

line2

y en la Python Console se visualiza:

>>>execfile(u'/home/zeito/pyqgis_scripts/put_point.py'.encode('UTF-8'))
True
0 383385.118266 4460194.36942
1 390681.092698 4454284.93838
2 392122.067822 4441596.47954
3 403728.992813 4430323.86703
4 418342.970957 4427876.0721
5 416781.947501 4451209.75911
6 433966.015417 4435597.2308
7 438984.794505 4447930.8787
8 435361.150544 4458588.14798

Si se quiere revertir la adición del punto, para borrarlo habría que sustituir la línea con el método ‘insertVertex’ por esta otra:

...
layer.deleteVertex(0, 5)
...

Se obtendría el shapefile original.

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

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