En primer lugar, quiero decir que sé que ya se ha planteado una cuestión similar, pero no se ha dado una solución satisfactoria.
Necesito obtener el número de vértices de cada objeto en la capa de líneas vectoriales. Basándome en este artículo: https://joseguerreroa.wordpress.com/2014/07/28/contar-y-extraer-nodos-vertices-para-vectoriales-de-linea-o-poligono-mediante-pyqgis/
Hice este código:
layer = qgis.utils.iface.activeLayer()
feat = layer.getFeatures()
for feature in feat:
geom = feature.geometry()
n = 1
ver = geom.vertexAt(0)
points=[]
while(ver != QgsPoint(0,0)):
n +=1
points.append(ver)
ver = geom.vertexAt(n)
print n
Y como resultado obtengo el número de vértices, pero sólo del último objeto. Supongo que me falta un bucle while en la capa (para obtener el número de cada objeto), ¿tengo razón? Pero no sé cómo debería quedar.
Sé que existe el plugin "Contador de vértices", pero no funciona (ni siquiera se inicia) en mi caso (QGIS 2.12, Win 8.1). Y necesito que se haga en Python.
Por cierto, ¿no creen que es ridículamente difícil obtener el número de vértices mientras que es tan fácil obtener las coordenadas de cada vértice?
EDITAR: @nwduncan ( @ArMoraer también) sugirió arreglar una sangría, y fue una buena pista. Me he dado cuenta de que la consola de Python necesita refrescarse, porque a veces no puede manejar las sangrías. Espero que ayude a otros principiantes. El código final es:
layer = qgis.utils.iface.activeLayer()
feat = layer.getFeatures()
for feature in feat:
geom = feature.geometry()
n = 1
ver = geom.vertexAt(0)
points=[]
while(ver != QgsPoint(0,0)):
n +=1
points.append(ver)
ver=geom.vertexAt(n)
print n
1 votos
No estoy familiarizado con pyqgis, pero puedo ver en tu código que tu bucle feature in feat está asignando el objeto de geometría a la variable geom y luego sobrescribiéndolo con el siguiente objeto de geometría sin contar realmente las vértices. Intenta sangrar las líneas 6-15 para que se sitúen debajo del bucle for featuer in feat.
0 votos
Lo intenté antes y me salieron muchos errores de 'sangría inesperada'. Pero... como estaba un poco frustrado seguí tu consejo. Así que de nuevo, cambié la sangría y esta vez lo guardé en un nuevo archivo y ¡funcionó! Creo que el problema fue que la consola de QGIS Python no es perfecta y guardar el código en un nuevo archivo de alguna manera ayudó. Ni idea de cómo, pero lo hizo :) ¡Gracias por la pista!
1 votos
Si sólo eres nuevo en Python yo evitaría los bucles while si puedes. Es muy fácil entrar en un bucle infinito. También
QgsPoint(0,0)
es un punto válido en algunas proyecciones.