Ich habe mich gefragt, ob jemand Erfahrung darin hat, Höhendaten aus einem Raster abzurufen , ohne ArcGIS zu verwenden , sondern die Informationen als Python zu erhalten, list
oder dict
?
Ich erhalte meine XY-Daten als Liste von Tupeln:
xy34 =[perp_obj[j].CalcPnts(float(i.dist), orientation) for j in range (len(perp_obj))]
Ich möchte die Liste durchlaufen oder an eine Funktion oder Klassenmethode übergeben, um die entsprechende Höhe für die xy-Paare zu erhalten.
Ich habe einige Nachforschungen zu diesem Thema angestellt und die gdal- API klingt vielversprechend. Kann mir jemand raten, wie man Dinge, Fallstricke und Beispielcode angeht?
GDAL ist keine Option, da ich die Systempfadvariable auf dem Computer, an dem ich arbeite, nicht bearbeiten kann!
Kennt jemand einen anderen Ansatz?
Antworten:
Hier ist eine programmatischere Art der Verwendung von GDAL als die Antwort von @ Aragon. Ich habe es nicht getestet, aber es ist meistens der Kesselplattencode, der in der Vergangenheit für mich funktioniert hat. Es basiert auf Numpy- und GDAL-Bindungen, aber das war es auch schon.
quelle
mapToPixel()
undpixelToMap()
sind das wichtige Bit, solange Sie ein numpy-Array (oder ein reguläres Python-Array, aber im Allgemeinen nicht so effizient für solche Dinge) erstellen und den geografischen Begrenzungsrahmen des Arrays erhalten können.gt
im Beispiel) falsch ist. Eine affine Matrix, wie sie in CGAL verwendet wird (siehe: gdal.org/gdal_datamodel.html ), ist im Allgemeinen invertierbar (andernfalls werden einige funky Skalierungswerte ausgeführt). Wo wir also habeng = p.A
, können wir auchp = g.A^-1
Numpy machen. Linalg ist für unsere Zwecke ein bisschen schwergewichtig - wir können alles auf zwei einfache Gleichungen reduzieren.Schauen Sie sich meine Antwort hier an ... und lesen Sie hier einige Informationen. Die folgenden Informationen stammen von Geotips:
Mit gdallocationinfo können wir die Höhe an einem Punkt abfragen:
Die Ausgabe des obigen Befehls hat die Form:
Dies bedeutet, dass der Höhenwert an der angegebenen Geolokalisierung 1418 beträgt.
quelle
Siehe z. B. diesen Code, der auf GDAL basiert (und Python, keine Nummer erforderlich): https://github.com/geometalab/retrieve-height-service
quelle
Der bereitgestellte Python-Code extrahiert die Wertdaten einer Rasterzelle basierend auf gegebenen x, y-Koordinaten. Es ist eine leicht veränderte Version eines Beispiels aus dieser hervorragenden Quelle . Es basiert auf
GDAL
undnumpy
ist nicht Teil der Standard-Python-Distribution. Vielen Dank an @Mike Toews für den Hinweis auf die inoffiziellen Windows-Binärdateien für Python-Erweiterungspakete , um die Installation und Verwendung schnell und einfach zu gestalten.quelle