Ich habe Funktionen für mehrere Linien (auch in mehreren Punkten ...), die ähnliche Pfade (in diesem Fall Bergpfade) mit unterschiedlicher GPS-Präzision darstellen, was dazu führt, dass viele Linien nahe beieinander liegen, sich jedoch nicht perfekt überlappen.
Für den Zweck dieses Projekts suche ich nach einer Möglichkeit, aus allen eine "mittlere" Linie zu berechnen und eine resultierende Linie der wahrscheinlichsten Position des Pfades zu generieren.
Wie würden Sie mit QGIS oder einem anderen Tool vorgehen (ich dachte an OGR ...)?
Antworten:
Testdaten:
ICH.)
Erstellen Sie mit dem QGIS-Plugin
Locate Points Along Lines
( https://plugins.qgis.org/plugins/LocatePoints/ ) Punkte entlang Ihrer GPS-Tracks . Ich habe in meinem Beispiel ein Intervall von 5 m verwendet.II.)
Erstellen Sie eine
Concave Hull
mitProcessing > Toolbox > QGIS geoalgorithms >Vector geometry tools > Concave hull
. Ich habe0.1
in meinem Beispiel eine Schwelle von verwendet . Wenn der Schwellenwert zu niedrig ist, können Löcher im Ausgabepolygon vorhanden sein.III.)
Jetzt können Sie die "mittlere" Linie mit Hilfe des Skelettalgorithmus berechnen. Suche nach Skelett in der
Processing Toolbox
. Verwenden Sie dasv.voronoi.skeleton
Werkzeug aus demGRASS GIS 7 commands
.quelle
Der Heatmap-Ansatz:
Der Ansatz ist aufgrund der Berechnungszeit der Verarbeitungsschritte zeitaufwändiger. Es könnte als eine Idee gesehen werden, einer allgemeineren Lösung näher zu kommen.
Testdaten:
ICH.)
Erstellen Sie Punkte entlang Ihrer GPS-Tracks mit dem QGIS-Plugin. Suchen Sie Punkte entlang von Linien ( https://plugins.qgis.org/plugins/LocatePoints/ ). Für den Heatmap-Ansatz habe ich ein Intervall von 2 m verwendet .
II.)
Erstellen Sie eine Heatmap mit dem QGIS Heatmap-Plugin. Ich habe einen Radius von 40 m verwendet. Ich vergrößere den Radius, bis das Ausgabe-Raster keine Löcher mehr enthält. Sie müssen dies mit unterschiedlichen Radiuswerten versuchen.
III.)
BEARBEITET Es ist nicht erforderlich, den genauen Rasterwert der Heatmap beizubehalten.
Jetzt möchte ich das Raster auf die "weißen" Bereiche ausdünnen, in denen die meisten Punkte konzentriert sind. Dafür berechne ich das Ausgabe-Raster neu. Die Min / Max-Werte des Ausgabe-Rasters sind
0
und89.7935
. Ich benutze nur die obigen Werte44
. Dafür habe ich eine "Faustregel" verwendet. Runden Sie den Maximalwert ab und teilen Sie ihn durch zwei. Runden Sie diesen Wert ein anderes Mal ab.89/2 = 44,5
->44
. Ich habe die OSGeo4W-Shell verwendet :gdal_calc -A heatmap.tif --calc="A>=44" --NoDataValue=0 --outfile=heatmap_44_NoData.tif
.IV.)
BEARBEITET
a) Polygonisieren Sie die neu berechnete Wärmekarte mit
Raster > Conversion > Polygonize ...
b) Vereinfachen Sie das Polygon
Vector > Geometry Tools > Simplify geometries
. Ich habe eine Toleranz von verwendet2
. Ein einfacheres Polygon reduziert die Verarbeitungszeit für die Skelette.c) Skelette berechnen: Suchen Sie in der Processing Toolbox nach Skeletten. Verwenden Sie das
v.voronoi.skeleton
Werkzeug aus den GRASS GIS 7-Befehlen.Sie können sehen, dass die resultierende Linie mehr die wahrscheinlichste Position des Pfades darstellt als in meiner ersten Antwort. Speziell für die Kurve im Norden folgt die Mittellinie den drei Spuren, die näher beieinander liegen. Gleiches gilt für die Kurve im Osten.
Vorteile des Ansatzes:
Nachteile:
Wenn jemand die Verarbeitungsschritte optimieren kann, sind Sie herzlich willkommen!
quelle
use weight from field
. Können Informationen wie Geschwindigkeit (langsam / schnell durchlaufen) oder andere verwendet werden, um die Daten auf irgendeine Weise zu gewichten? Die Gewichtung könnte verwendet werden, um die Wärmekarte zu verbessern.