Antes de tudo, quero dizer que sei que um problema semelhante foi levantado antes, mas não forneceu uma solução satisfatória.
Preciso obter o número de vértices de cada objeto na camada de linha do vetor. Baseando-se neste artigo: https://joseguerreroa.wordpress.com/2014/07/28/contar-y-extraer-nodos-vertices-para-vectoriales-de-linea-o-poligono-mediante-pyqgis/
Eu fiz 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
E, como resultado, recebo um número de vértices, mas apenas o último objeto. Acho que estou perdendo um loop while na camada (para obter um número para cada objeto), estou certo? Mas não sei como deve ficar.
Eu sei que existe o plugin 'Contador de vértices', mas ele não funciona (nem inicia) no meu caso (QGIS 2.12, Win 8.1) .E eu preciso que seja feito em Python.
A propósito, vocês não acham pessoal, que é ridiculamente difícil obter o número de vértices enquanto é tão fácil obter as coordenadas de cada vértice?
EDIT: @nwduncan (@ArMoraer também) sugeriu a correção de um recuo, e foi uma boa pista. Percebi que o console Python precisa de atualização, porque às vezes não consegue lidar com recuos. Espero que ajude outros iniciantes. O código final é:
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)
é um ponto válido em algumas projeções.Respostas:
Recuo.
A primeira parte do seu código está correta, mas o restante pode ser bastante simplificado se você quiser apenas o número de vértices:
Se você também quiser as coordenadas dos vértices, poderá escrever (apenas polilinhas):
fonte
vertices = feature.geometry().asPolyline()
paravertices = feature.geometry().asMultiPolyline()
Não contar o número de vértices, mas imprimir tipo de números aleatórios (não posso ligá-la a quaisquer dados que tenho)No QGIS 2.14, uma nova função para contar vértices está disponível no
field calculator
:fonte
Outra abordagem será usar uma expressão definida pelo usuário. O mecanismo de expressão fará um loop na camada para você. O blog Nathans tem uma boa demonstração disso:
http://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/
fonte