Ich arbeite an einem Rechenmodell für die Häufigkeit von Wildbestäubern in einer Landschaft. Das Modell selbst ist vollständig, und ich habe jetzt mit einem Nachbearbeitungsschritt zu kämpfen.
Ich habe mein GDAL-Bestäuberversorgungs-Raster, das ungefähr so aussieht (hellere Farben bedeuten einen höheren Bestäuberaufruf pro Pixel):
Und ich habe ein OGR-Shapefile mit Punkten, die Beispielpositionen in der Landschaft darstellen:
Ich versuche, einige Analysen an den Pixeln unter diesen Punkten durchzuführen, aber dazu muss ich in der Lage sein, den Wert eines Pixels unter einem Punkt zu extrahieren.
Ist es möglich, den Wert eines Pixels unter einem Punkt nur mit OGR und GDAL über Python zu extrahieren? Ich würde es vorziehen, das Lesen des gesamten Rasters in den Speicher zu vermeiden ReadAsArray()
, da meine Ausgabe-Raster sehr, sehr groß sind (zu groß, um in den Speicher zu passen).
Mir ist dieser Beitrag aufgefallen , der ähnlich ist, aber einen Befehlszeilenaufruf erfordert.
Antworten:
Sie können die Methode gdal.Dataset oder gdal.Band ReadRaster verwenden. Weitere Informationen finden Sie in den Tutorials zur GDAL- und OGR- API sowie im folgenden Beispiel. ReadRaster verwendet / erfordert kein numpy, der Rückgabewert besteht aus rohen Binärdaten und muss mit dem Standard-Python- Strukturmodul entpackt werden .
Ein Beispiel:
Da Sie als Grund für die Nichtverwendung angegeben haben, dass nicht
numpy
das gesamte Array in using gelesen werden sollReadAsArray()
, finden Sie im Folgenden ein Beispiel, dasnumpy
das gesamte Raster verwendet und nicht einliest.quelle
px
/py
sind falsch in dem Fall , dass mx / mein liegt außerhalb der Grenzenrb
, daint(-0.5) == 0
. Sie müssenfloor(...)
überprüfen, ob keines vonpx
/py
kleiner als Null ist (oder dies vor dem Aufruf tunint()
), da negative Indizes funktionieren (sie erhalten die andere Seite des Arrays). Ich würde gerne wissen, ob es eine bessere Möglichkeit gibt, mit diesem Problem umzugehen. Wie schreibt man diese Zeilen neu, damit sie korrekt mit Rotationen umgehen?