Erstellen Sie mit QGIS eine „mittlere“ Linie aus mehreren Linien

12

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 ...)?

Geben Sie hier die Bildbeschreibung ein

Horizen
quelle
Jake
2
Dies klingt ähnlich wie "Conflation" und auf dieser Site gab es einige Themen : gis.stackexchange.com/search?q=conflation Bringen Sie eine der dortigen Fragen und Antworten näher?
SaultDon
Ich werde heute einen Blick auf "Conflation" werfen, aber bisher scheinen die zuvor vorgeschlagenen "Average Tracks" den Trick zu tun. Ich schaue einfach ein bisschen mehr nach, um zu sehen, ob dies direkt über QGIS möglich ist, aber beide Antworten sind großartig, danke!
Horizen
Sie können sich diesen Thread und seine Links ansehen
Johns

Antworten:

9

Testdaten:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 GPS-Tracks
  • innerhalb eines Rasters von 1x1km

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.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

II.)

Erstellen Sie eine Concave Hullmit Processing > Toolbox > QGIS geoalgorithms >Vector geometry tools > Concave hull. Ich habe 0.1in meinem Beispiel eine Schwelle von verwendet . Wenn der Schwellenwert zu niedrig ist, können Löcher im Ausgabepolygon vorhanden sein.

Geben Sie hier die Bildbeschreibung ein

III.)

Jetzt können Sie die "mittlere" Linie mit Hilfe des Skelettalgorithmus berechnen. Suche nach Skelett in der Processing Toolbox. Verwenden Sie das v.voronoi.skeletonWerkzeug aus dem GRASS GIS 7 commands.

Geben Sie hier die Bildbeschreibung ein

Stefan
quelle
7

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:

  • QGIS 2.18.16, GRASS GIS 7
  • 4 GPS-Tracks
  • innerhalb eines Rasters von 1x1km

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.

Geben Sie hier die Bildbeschreibung ein

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 0und 89.7935. Ich benutze nur die obigen Werte 44. 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.

Geben Sie hier die Bildbeschreibung ein

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 verwendet 2. 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.skeletonWerkzeug aus den GRASS GIS 7-Befehlen.

Geben Sie hier die Bildbeschreibung ein

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:

  • angemessen gute Ergebnisse ausschließlich mit QGIS

Nachteile:

  • Verarbeitungszeit für große Datenmengen
  • Sie müssen a priori Parameter ausprobieren (Radius der Heatmap, Min / Max-Werte)
  • Es ist schwierig, die Verarbeitungsschritte zu automatisieren
  • Nicht getestet für enge Kurven / Kurven und für Spuren, die wirklich aus der Linie treten

Wenn jemand die Verarbeitungsschritte optimieren kann, sind Sie herzlich willkommen!

Stefan
quelle
+1. Dies ist ein effektiver Ansatz, um eine "mittlere Linie" zu finden. Es ist jedoch nicht unbedingt die beste Schätzung der richtigen Linie. Um zu sehen, warum nicht, stellen Sie sich vor, dass die meisten Pfade sehr schnell durchlaufen wurden, aber einer extrem langsam, langsam genug, dass Fehler an jedem Ort gemittelt worden wären. Dieser einzelne Pfad würde die zuverlässigste Darstellung der Wahrheit liefern, aber durch erneutes Abtasten jedes Pfades würden diese Informationen verloren gehen und mit den vielen ärmeren Darstellungen gemittelt werden. Natürlich ist dies ein extremer Fall, aber in Wirklichkeit könnten einige Wege besser sein als andere.
whuber
Ich verstehe. Danke für Ihre Antwort. Das Heat Map Plugin in QGIS bietet einige erweiterte Optionen, wo Sie können 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.
Stefan
Ja, das könnten Sie tun - aber keine dieser Techniken behebt die Bedenken, dass die Daten eine (stark positive) Autokorrelation aufweisen könnten. Der Umgang damit würde so etwas wie eine Zeitreihenanalyse der einzelnen Pfade erfordern.
whuber