Ich habe eine MultiLineStringZM-Ebene in einer SQLite-Datenbank und versuche, die Kennzahlen oder m-Werte an den Scheitelpunkten zu visualisieren. Ich habe versucht, Informationen dazu in QGIS nachzuschlagen, und alles, was ich sammeln konnte, ist, dass dies nicht direkt von der Linestring-Ebene aus möglich ist und dass die Punkte in eine separate Ebene extrahiert werden müssen.
Ich habe Vector
-> Geometry Tools
-> verwendet Extract nodes
, um eine Mehrpunktebene zu erstellen, die die Scheitelpunkte meiner Mehrzeilenebene darstellt, aber der Prozess verliert die m-Werte der Scheitelpunkte. Ich brauche die m-Werte, die erhalten bleiben, indem ich entweder den m-Wert als Attribut des Punktes speichere oder etwas anderes?
Intern haben wir ein Befehlszeilen-Tool, das Linestrings in ein Punkt-Shapefile konvertiert, wobei die m-Werte als Attribut für jeden Punkt gespeichert sind. Damit habe ich überprüft, ob den Scheitelpunkten m-Werte zugewiesen sind, und ich könnte sie verwenden das, wenn ich muss, aber wenn möglich, wäre es schön, wenn dies direkt in QGIS geschehen könnte.
BEARBEITEN - Wiederholen Sie das, was ich oben gesagt habe, aber betonen Sie erneut die Tatsache, dass wir ein Befehlszeilentool haben, mit dem die von mir gesuchten Ergebnisse erzielt werden können. Dabei werden die GDAL-Bibliotheken verwendet, sodass eine Lösung nur eine teilweise Antwort in zeigt PyQGIS ist nicht die Antwort, die ich suche. Ich suche ein eingebautes Tool, ein für QGIS erstelltes Plugin oder ein vollständiges Skript, das m-Werte aus einer MultiLineStringZM- oder LineStringZM-Geometrie extrahieren (nicht erstellen / generieren) und visualisieren kann.
quelle
Antworten:
Soweit ich weiß, scheint es für diese genaue Situation keine existierende Lösung zu geben, aber ich wollte dies dennoch in QGIS tun können, also habe ich den Sprung in Python-Skripte gewagt.
Eine Anleitung zum Schreiben von Verarbeitungsalgorithmen finden Sie hier https://docs.qgis.org/2.18/en/docs/user_manual/processing/scripts.html
Um diesen Code zu verwenden, öffnen Sie die Toolbox "Verarbeitung", erweitern Sie "Skripte" und anschließend "Extras". Wählen Sie "Neues Skript erstellen" und kopieren Sie den folgenden Code und fügen Sie ihn in das Skriptfenster ein (seien Sie vorsichtig beim Kopieren und Einfügen von Python-Code, da Leerzeichen syntaktisch von Bedeutung sind. Wenn Sie Probleme haben, fügen Sie den Code in einen Texteditor ein, der Leerzeichen anzeigt, und stellen Sie sicher dass es richtig kopiert wurde). Speichern Sie es, wo immer Sie möchten, und oben im Fenster befindet sich eine Schaltfläche zum Ausführen eines Skripts. Nachdem Sie es gespeichert haben, können Sie "Skript aus Datei hinzufügen" und das Skript dauerhaft unter "Benutzerskripte" haben.
Wenn das Verarbeitungsfenster geöffnet wird, wählen Sie die Ebene aus, die die Vektorgeometrie enthält, und wählen Sie Ausführen aus. Das Skript verhält sich genauso wie "Knoten extrahieren", außer dass es eine Spalte mit dem Namen
MValues
und oderZValues
abhängig davon, was in der Eingabegeometrie verfügbar ist , hinzufügt .quelle
Mit QGIS 3.0 oder neuer ist diese Aufgabe trivial. Suchen Sie in der "Processing Toolbox" (Öffnen mit Strg + Alt + T oder Processing -> Toolbox) nach "Extract Vertices" und führen Sie diesen Algorithmus aus.
Wählen Sie Ihre M- oder ZM-Linien- oder Polygongeometrie als Eingabeebene aus und führen Sie sie aus.
Die Eckpunkte werden mit intakten M- und Z-Werten extrahiert, je nachdem, was in der ursprünglichen Geometrie enthalten ist.
Wenn der M-Wert als Feld in der Attributtabelle benötigt wird, kann der Feldrechner mit einem Ausdruck wie verwendet werden
m($geometry)
quelle