En primer lugar, quiero decir que sé que se planteó un problema similar antes, pero no proporcionó una solución satisfactoria.
Necesito obtener el número de vértices de cada objeto en la capa de línea vectorial. Basándose 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 solo del último objeto. Supongo que me falta uno mientras bucle en la capa (para obtener el número de cada objeto), ¿estoy en lo cierto? Pero no sé cómo debería verse.
Sé que en mi caso existe el complemento 'Contador de vértices ", pero no funciona (ni siquiera se inicia) (QGIS 2.12, Win 8.1). Y necesito que se haga en Python.
Por cierto, ¿no les parece, chicos, que es ridículamente difícil obtener el número de vértices mientras que es tan fácil llegar a las coordenadas de cada vértice?
EDITAR: @nwduncan (@ArMoraer también) sugirió arreglar una sangría, y fue una buena pista. Noté que la consola Python necesita refresco, 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
QgsPoint(0,0)
es un punto válido en algunas proyecciones.Respuestas:
Sangría.
La primera parte de su código es correcta, pero el resto puede simplificarse enormemente si solo desea la cantidad de vértices:
Si también desea las coordenadas de los vértices, puede escribir (solo polilíneas):
fuente
vertices = feature.geometry().asPolyline()
paravertices = feature.geometry().asMultiPolyline()
que no cuente el número de vértices, pero imprime números aleatorios (no puedo vincularlo con los datos que tengo)En QGIS 2.14, una nueva función para contar vértices está disponible en
field calculator
:fuente
Otro enfoque será utilizar una expresión definida por el usuario. El motor de expresión repetirá la capa por ti. El blog de Nathans tiene una buena demostración sobre eso:
http://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/
fuente