Ich möchte ein einigermaßen genaues Höhenprofil für eine mit einem GPS aufgezeichnete Strecke erhalten (die häufig sehr unzuverlässige Höhendaten enthält und gelegentlich, je nach Modell, überhaupt keine).
Hat jemand irgendwelche Hinweise auf den einfachsten Weg, dies zu tun. Die beiden Techniken, die ich bisher in Betracht ziehe, sind:
Verwenden der Google Elevation-API
Diese API ist relativ einfach zu verwenden, erfordert jedoch einige Schritte, die aufgrund der Nutzungsbeschränkungen nicht trivial sind: Es werden maximal 512 Beispiele pro Anforderung zurückgegeben, und die Anzahl der Punkte entlang des Pfads ist ebenfalls begrenzt (durch die URL-Länge).
Ich gehe davon aus, dass ein gpsbabel simplify-Filter zusammengestellt werden kann, um die Spur auf eine geeignete Anzahl von Punkten zu reduzieren (kein Punkt in ihnen ist näher als etwa 100 m zusammen, da die Höhendaten aufgelöst sind), aber dann bleibt das Problem der Kartenerstellung bestehen Diese vereinfachte Spur führt zurück auf den ursprünglichen Pfad, da die Längen unterschiedlich sein werden.
Wenn dies nicht für die Automatisierung geeignet ist, empfiehlt es sich, die Schnittpunkte auf einer Karte manuell auszuwählen.
Herunterladen der SRTM-Daten (Shuttle Radar Topography Mission) und lokale Abfrage.
Dies ist etwas, mit dem ich keine Erfahrung habe, daher sind Vorschläge, wie dies machbar ist, willkommen. Wie groß ist der Datensatz? Welche GIS-Software wird benötigt und kann in geeigneter Weise gescriptet werden? Ich würde es vorziehen, keinen Abtast- und Interpolationsalgorithmus zu schreiben, der sich nach Schmerz anhört . Was ist die wahrscheinliche Leistung eines solchen Ansatzes? (Ich brauche es, um ziemlich schnell zu sein und auf einem speicherbegrenzten VPS-Webserver zu laufen ...)
Einige weitere Details zur Ausarbeitung der Antwort von @ MerseyViking beim Herunterladen der Daten von http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp :
Es gibt 72 x 24 Kacheln mit jeweils etwa 20 MB ZIP-Datei, die in eine 72,1 MB 16-Bit-TIF-Datei (6001 x 6001 Pixel) dekomprimiert wird.
Das sind ~ 120 GB, mehr als ich speichern kann. Wenn Sie es komprimiert lassen und die Ozeane ignorieren, wird es möglicherweise auf 10 GB reduziert, was immer noch ein bisschen zu groß ist. Das Laden der Daten bei Bedarf würde den benötigten Speicherplatz drastisch reduzieren, aber die Quellwebsite ist langsam (ich habe nur 10 KBit / s erhalten), was dies ziemlich unpraktisch macht.
Antworten:
Für eine lokale Lösung kann GRASS folgendermaßen skriptiert werden:
Ich habe eine erweiterte Version für einen meiner Anwendungsfälle ausgeführt, und die Leistung von v.drape war überhaupt kein Problem.
quelle
gpsvisualizer.com erledigt das für Sie. Ich glaube, es verwendet GPSBabel und Google API im Hintergrund.
quelle
Es hört sich so an, als ob Sie dies als generische Lösung benötigen, dh Sie haben alle Höhendaten der Welt für jede Spur zur Verfügung, die Sie verarbeiten möchten, und möchten daher nicht alle CGIAR-Daten lokal speichern. Das oben erwähnte gpsvisualizer.com (@Llaves) ist möglicherweise die beste Wahl.
Wenn Sie keine hohe Auflösung benötigen, beträgt der GTOPO-Datensatz (1 km-Raster) nur ~ 300 MB für den gesamten Planeten. Andernfalls stehen die Datensätze ASTER GDEM (30 m) und Original SRTM (90 m) zur Verfügung, Sie weisen jedoch darauf hin, dass viele Daten vorhanden sind. (Die Größe der ASTER-Daten kann nach dem Download reduziert werden, indem die gebündelten PDF-Dateien entfernt werden, die häufig größer als die tatsächlichen Höhendaten sind - der Afrika-Datensatz wurde dabei um 40% reduziert!).
In R können Sie das Höhenprofil relativ schnell aus einem dieser Datasets extrahieren. Das Laden des Rasters kann jedoch die meiste Zeit in Anspruch nehmen. Dies verwendet eine kleine benutzerdefinierte readGPX-Funktion und gpsbabel, um GPX-Daten zu verarbeiten:
'track' ist jetzt eine Tabelle mit GPS-Punkten mit Lat / Lon, anderen Standard-GPX-Daten (Geschwindigkeit, GPS-Höhe usw.) und einer 'profile'-Spalte, die die Höhe an diesem Punkt angibt.
quelle
SRTM-Daten können für einen bestimmten Bereich einfach heruntergeladen werden. Ich habe diese Site in der Vergangenheit verwendet. Die Dateien sind nicht riesig und können als georeferenzierte TIFFs abgerufen werden. Das Herunterladen der ganzen Welt kann eine Weile dauern, aber ein paar Kacheln bedecken einen ziemlich großen Bereich. Das Problem, das Sie möglicherweise haben, ist die horizontale Auflösung, die für den größten Teil der Welt etwa 90 Meter beträgt, und der vertikale Fehler kann mit Spitzen und Bereichen mit fehlenden Daten recht groß sein.
Der ASTER GDEM-Datensatz ist eine neuere Vermessung mit höherer Auflösung und einer horizontalen Auflösung von ca. 30 m, die Qualität ist jedoch häufig geringer als die entsprechenden SRTM-Daten.
Ich weiß nicht, mit welcher Auflösung die Google-Höhendaten vorliegen, wäre aber nicht überrascht, wenn sie auf SRTM basieren. Daher kann die Verwendung der Google-API zu ähnlichen Ergebnissen führen wie die Verwendung eines lokalen Prozesses.
Nach der Antwort von @underdark ist GRASS GIS wahrscheinlich der richtige Weg, wenn dies ein einfaches webbasiertes System sein soll . Ich habe r.profile verwendet, um einfache Intervisibility-Diagramme mit einigem Erfolg zu erstellen , bin mir jedoch nicht sicher, welche Interpolationsmethode verwendet wird. es könnte möglicherweise nur der nächste Nachbar sein. Bearbeiten : Wenn Sie sich den Quellcode ansehen ,
r.profile
wird der nächste Nachbar verwendet, sodass Sie möglicherweise einige Treppenstufen-Artefakte erhalten.Eine andere Möglichkeit könnte darin bestehen, ein Python-Skript mit GDAL und NumPy zu schreiben , was zwar etwas aufwändiger ist, aber eine schöne, benutzerdefinierte Lösung darstellt.
quelle
Als erstes sollten Sie angeben, mit welcher horizontalen / vertikalen Genauigkeit Sie zufrieden wären.
Aber schauen wir uns das aus praktischer Sicht an:
quelle