Zunächst möchte ich sagen, dass ich weiß, dass ein ähnliches Problem bereits früher angesprochen wurde, aber keine zufriedenstellende Lösung bot.
Ich muss die Anzahl der Eckpunkte jedes Objekts auf der Vektorlinienebene ermitteln. Basierend auf diesem Artikel: https://joseguerreroa.wordpress.com/2014/07/28/contar-y-extraer-nodos-vertices-para-vectoriales-de-linea-o-poligono-mediante-pyqgis/
Ich habe diesen Code gemacht:
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
Und als Ergebnis erhalte ich die Anzahl der Eckpunkte, aber nur des letzten Objekts. Ich vermisse wohl eine while-Schleife auf der Ebene (um die Nummer für jedes Objekt zu erhalten), habe ich Recht? Aber ich weiß nicht, wie es aussehen soll.
Ich weiß, dass es ein 'Vertices Counter'-Plugin gibt, aber es funktioniert in meinem Fall nicht (startet nicht einmal) (QGIS 2.12, Win 8.1). Und ich muss es in Python machen.
Denken Sie übrigens nicht, dass es lächerlich schwierig ist, die Anzahl der Scheitelpunkte zu ermitteln, während es so einfach ist, die Koordinaten jedes Scheitelpunkts zu ermitteln?
BEARBEITEN: @nwduncan (auch @ArMoraer) schlug vor, eine Einrückung zu korrigieren, und es war ein guter Hinweis. Ich habe festgestellt, dass die Python-Konsole aktualisiert werden muss, da sie manchmal keine Einrückungen verarbeiten kann. Hoffe es wird anderen Anfängern helfen. Der endgültige Code lautet:
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)
ist ein gültiger Punkt in einigen Projektionen.Antworten:
Vertiefung.
Der erste Teil Ihres Codes ist korrekt, aber der Rest kann erheblich vereinfacht werden, wenn Sie nur die Anzahl der Scheitelpunkte möchten:
Wenn Sie auch die Koordinaten der Eckpunkte möchten, können Sie schreiben (nur Polylinien):
quelle
vertices = feature.geometry().asPolyline()
bisvertices = feature.geometry().asMultiPolyline()
es nicht Anzahl der Ecken zählt aber Art von Zufallszahlen drucken (Ich kann es nicht zu irgendwelchen Daten ich habe)In QGIS 2.14 ist eine neue Funktion zum Zählen von Scheitelpunkten verfügbar in
field calculator
:quelle
Ein anderer Ansatz besteht darin, einen benutzerdefinierten Ausdruck zu verwenden. Die Ausdrucks-Engine durchläuft die Ebene für Sie. Nathans Blog hat eine gute Demo dazu:
http://nathanw.net/2012/11/10/user-defined-expression-functions-for-qgis/
quelle