Tout d'abord, je tiens à dire que je sais qu'une question similaire a été soulevée auparavant, mais qu'elle n'a pas fourni de solution satisfaisante.
J'ai besoin d'obtenir le nombre de sommets de chaque objet sur le calque de ligne vectorielle. Sur la base de cet article: https://joseguerreroa.wordpress.com/2014/07/28/contar-y-extraer-nodos-vertices-para-vectoriales-de-linea-o-poligono-mediante-pyqgis/
J'ai fait ce code:
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
Et comme résultat, j'obtiens un certain nombre de sommets, mais seulement du dernier objet. Je suppose qu'il me manque une boucle while sur le calque (pour obtenir le numéro de chaque objet), ai-je raison? Mais je ne sais pas à quoi ça devrait ressembler.
Je sais qu'il existe un plugin 'Vertices counter', mais cela ne fonctionne pas (ne démarre même pas) dans mon cas (QGIS 2.12, Win 8.1). Et j'ai besoin que ce soit fait en Python.
Au fait, ne pensez-vous pas, les gars, qu'il est ridiculement difficile d'obtenir le nombre de sommets alors qu'il est si facile d'obtenir les coordonnées de chaque sommet?
EDIT: @nwduncan (@ArMoraer aussi) a suggéré de corriger une indentation, et c'était un bon indice. J'ai remarqué que la console Python a besoin d'être rafraîchie, car parfois elle ne peut pas gérer les indentations. J'espère que cela aidera d'autres débutants. Le code final est:
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)
un point valable dans certaines projections.Réponses:
Échancrure.
La première partie de votre code est correcte, mais le reste peut être grandement simplifié si vous voulez juste le nombre de sommets:
Si vous souhaitez également les coordonnées des sommets, vous pouvez écrire (polylignes uniquement):
la source
vertices = feature.geometry().asPolyline()
àvertices = feature.geometry().asMultiPolyline()
elle ne compte pas le nombre de sommets , mais l' impression sorte de nombres aléatoires (je ne peux pas le lier à toutes les données dont je dispose)Dans QGIS 2.14, une nouvelle fonction pour compter les sommets est disponible dans
field calculator
:la source
Une autre approche consistera à utiliser une expression définie par l'utilisateur. Le moteur d'expression bouclera le calque pour vous. Le blog de Nathans a une bonne démo à ce sujet:
http://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/
la source