Mehr

Ausdehnung in GDAL WriteArray angeben?


Ist es möglich, die Ausdehnung beim Erstellen eines leeren Rasters in GDAL anzugeben?

Ich habe überall gesucht, aber nichts gefunden. Der Teil meines Skripts, in dem ich das Raster schreibe, würde etwa so aussehen:

tifpath = "path/to/output/tiff.tif" drvtif = gdal.GetDriverByName("GTiff") rast = drvtif.Create(tifpath, Ncolumns, Nrows, Nbands, datatype) rast.SetProjection(projection) # Projektion ist eine Variable repräsentiert die gewünschte Projektion rast.GetRasterBand(1).WriteArray(array)

Mein Array ist ein Array der Größe Ncolumns x Nrows, gefüllt mit Nullen (ich möchte ein leeres Raster). Die Anzahl der Pixel ist vorbestimmt, ebenso wie die Zellengröße, und durch Multiplizieren von npixels * Zellengröße habe ich bestimmt, wie meine Ausgabeausdehnungen sein müssen, damit jedes Pixel ein ganzes Pixel ist (dh nicht durch die Ausdehnung abgeschnitten wird) ).

Ich kann jedoch keine Optionen finden, mit denen ich den gewünschten Umfang angeben könnte.

Mir ist auch gerade aufgefallen, dass ich keine Option zum Angeben der Zellengröße sehe.


Ja, mit demSetGeoTransformMethode. Die geografische Transformation definiert den Ursprung des Rasters in der oberen linken Ecke sowie die Zellengröße und die Drehung in x- und y-Richtung für die Zellen in diesem Format:

geo_transform = (x oben links, x Zellengröße, x Rotation, y oben links, y Rotation, negative y Zellengröße)

Oder in dem von Ihnen bereitgestellten Beispiel:

geo_transform = (-180, 0.0089952083, 0., 90, 0., -0.0089952083)

Dieser Satz kann auf das Dataset-Objekt angewendet werden;

rast.SetGeoTransform(geo_transform)

Hinweis Oben links sind die Koordinaten des oberen linken Randes der Zelle, nicht der Zellmittelpunkt.


Arbeiten mit ECOSTRESS Evapotranspirationsdaten

Das Land Processes Distributed Active Archive Center (LP DAAC) vertreibt die Datenprodukte des Ecosystem Spaceborne Thermal Radiometer Experiment on Space Station (ECOSTRESS). Die Mission ECOSTRESS hat die Aufgabe, die Temperatur von Pflanzen zu messen, um besser zu verstehen, wie viel Wasser Pflanzen brauchen und wie sie auf Stress reagieren. ECOSTRESS-Produkte werden im HDF5-Dateiformat als schwadbasierte Produkte archiviert und verteilt.

In diesem Tutorial verwenden Sie Python, um eine Streifen-zu-Gitter-Konvertierung durchzuführen, um die Streifendaten auf ein Gitter mit einem definierten Koordinatenreferenzsystem (CRS) zu projizieren, ECOSTRESS-Daten mit bodenbasierten AmeriFlux-Fluxturm-Beobachtungen zu vergleichen und wissenschaftliche Datensätze zu exportieren (SDS)-Layer als GeoTIFF-Dateien, die in ein GIS- und/oder Remote-Sensing-Softwareprogramm geladen werden können.

Beispiel: Konvertieren einer Schwad-ECO3ETPTJPL.001 HDF5-Datei in ein GeoTIFF mit einem definierten CRS und Vergleich von ECOSTRESS Evapotranspiration (ET) mit bodengestützten ET-Beobachtungen von einem AmeriFlux-Fluxturm-Standort in Kalifornien.

Im Beispiel verwendete Daten:

  • Daten Produkt: ECOSTRESS Evapotranspiration PT-JPL Daily L3 Global 70m Version 1 (ECO3ETPTJPL.001)
    • Science Dataset (SDS)-Ebenen:
      • ETinst
      • ETinstUncertainty
      • Science Dataset (SDS)-Ebenen:
        • Breite
        • Längengrad
        • Variablen:
          • Latentwärme (W/m 2 )

          Wenn eine Straftat im Rahmen der besonderen See- und Territorialgerichtsbarkeit extraterritorial angewendet wird, kann sie dann angewendet werden, wenn sie im Ausland begangen wird?

          Ich finde das verwirrend. Wenn Bob, ein US-Bürger, in Land A eine Straftat begeht, die gemäß der besonderen See- und Territorialgerichtsbarkeit extraterritorial illegal ist, bedeutet dies, dass er von den USA dafür angeklagt werden kann? Wenn ich hier lese, lautet die Antwort nein, da ein fremdes Land nicht in die Definition des SMTJ aufgenommen zu sein scheint. Die besondere See- und Territorialgerichtsbarkeit ist definiert als:

          Der Begriff „besondere See- und Territorialgerichtsbarkeit der Vereinigten Staaten“, wie er in diesem Titel verwendet wird, umfasst:

          (1) Die Hohe See, alle anderen Gewässer innerhalb der Admiralitäts- und Seegerichtsbarkeit der Vereinigten Staaten und außerhalb der Gerichtsbarkeit eines bestimmten Staates und jedes Schiff, das ganz oder teilweise den Vereinigten Staaten oder einem ihrer Bürger gehört oder jede Gesellschaft, die durch oder nach den Gesetzen der Vereinigten Staaten oder eines Staates, Territoriums, Distrikts oder Besitzes davon gegründet wurde, wenn sich ein solches Schiff unter der Admiralität und Seegerichtsbarkeit der Vereinigten Staaten und außerhalb der Gerichtsbarkeit eines bestimmten Staates befindet.

          (2) Jedes Schiff, das nach den Gesetzen der Vereinigten Staaten registriert, zugelassen oder immatrikuliert ist und auf den Gewässern eines der Großen Seen oder eines der sie verbindenden Gewässer oder auf dem Sankt-Lorenz-Strom, wo die dasselbe bildet die Internationale Grenzlinie.

          (3) Alle Ländereien, die zur Nutzung durch die Vereinigten Staaten reserviert oder erworben werden und unter deren ausschließlicher oder gleichzeitiger Gerichtsbarkeit stehen, oder jeder Ort, der von den Vereinigten Staaten mit Zustimmung der gesetzgebenden Körperschaft des Staates, in dem sie sich befinden, erworben oder anderweitig erworben wird , für die Errichtung einer Festung, eines Magazins, eines Arsenals, einer Werft oder eines anderen notwendigen Gebäudes.

          (4) Alle Inseln, Felsen oder Schlüssel, die Guanovorkommen enthalten, die nach Ermessen des Präsidenten als zu den Vereinigten Staaten gehörend betrachtet werden können.

          (5) Alle Luftfahrzeuge, die ganz oder teilweise den Vereinigten Staaten oder einem ihrer Bürger oder einer durch oder nach den Gesetzen der Vereinigten Staaten gegründeten Körperschaft oder einem Staat, Territorium, Distrikt oder Besitz davon gehören, während solche sich das Luftfahrzeug auf hoher See oder über anderen Gewässern innerhalb der Admiralität und der Seegerichtsbarkeit der Vereinigten Staaten und außerhalb der Gerichtsbarkeit eines bestimmten Staates befindet.

          (6) Jedes Fahrzeug, das für den Flug oder die Navigation im Weltraum verwendet oder konstruiert ist und im Register der Vereinigten Staaten gemäß dem Vertrag über die Grundsätze zur Regelung der Aktivitäten von Staaten bei der Erforschung und Nutzung des Weltraums, einschließlich des Mondes und anderer Himmelskörper, eingetragen ist und das Übereinkommen über die Registrierung von in den Weltraum gestarteten Objekten, während dieses Fahrzeug im Flug ist, d. h. ab dem Zeitpunkt, an dem alle Außentüren auf der Erde nach der Einschiffung geschlossen werden, bis zu dem Zeitpunkt, an dem eine solche Tür auf der Erde zur Ausschiffung oder in dem Fall geöffnet wird einer Notlandung, bis die zuständigen Behörden die Verantwortung für das Fahrzeug sowie für Personen und Sachen an Bord übernehmen.

          (7) Jeder Ort außerhalb der Gerichtsbarkeit einer Nation in Bezug auf eine Straftat durch oder gegen einen Staatsangehörigen der Vereinigten Staaten.

          (8) Soweit nach internationalem Recht zulässig, jedes ausländische Schiff während einer Reise mit planmäßiger Abfahrt von oder Ankunft in den Vereinigten Staaten in Bezug auf eine Straftat, die von oder gegen einen Staatsangehörigen der Vereinigten Staaten begangen wurde.

          (9) In Bezug auf Straftaten, die von oder gegen einen Staatsangehörigen der Vereinigten Staaten begangen werden, wie dieser Begriff in Abschnitt 101 des Immigration and Nationality Act verwendet wird –

          (A) die Räumlichkeiten der diplomatischen, konsularischen, militärischen oder sonstigen Vertretungen oder Einrichtungen der US-Regierung in fremden Staaten, einschließlich der Gebäude, Gebäudeteile und dazugehöriger oder ergänzender Grundstücke oder die für die Zwecke dieser Missionen oder Einrichtungen verwendet werden, unabhängig davon Eigentum und

          (B) Wohnsitze in fremden Staaten und das dazugehörige oder dazugehörige Land, ungeachtet des Eigentums, das für die Zwecke dieser Missionen oder Einrichtungen verwendet wird oder von US-Personal verwendet wird, das diesen Missionen oder Einrichtungen zugewiesen ist.


          Was kommt als nächstes

          Schneller Tipp: Ändern der Geotransformation mit GDAL-Python

          Beim Vorbereiten des nächsten Beitrags habe ich eine Datei mit einer falschen Geotransformation gefunden, aber kein einfaches Werkzeug dafür.
          Die Codierung ist so einfach wie das Öffnen der Datenquelle mit der Update-Option und das Einstellen der neuen Geotransformation wie folgt:
          Wobei die Geotransformation a . sein muss Tupel wie (-180,5, 1,0, 0,0, 90,5, 0,0, -1,0). Weitere Informationen finden Sie in der Dokumentation.

          Ich habe ein kleines Programm erstellt, um es noch einfacher zu machen, genannt changeGeotransform.py:


          Der Kompass

          Das Schöne an der App ist der bewegliche Kompass. Um es zu bekommen, brauchen wir drei Dinge:

          • Abrufen der geografischen Koordinaten
          • Abrufen der Geräteausrichtung (die geografische) und der Bildschirmausrichtung (Querformat oder Hochformat)
          • Zeichnen der Daten

          Das Abrufen des Standorts ist ganz normal, indem Sie einfach navigator.geolocation.watchPosition anhören und einen Rückruf anrufen. Der Browser wird um Erlaubnis fragen.

          Auch die Orientierung schien einfach, ist es aber nicht. Ich habe ein Kompassbeispiel gefunden (mit einem Fehler zeigt immer auf die anfängliche Geräteposition), aber viele Browser erfordern spezielle Konfigurationen, damit die Ausrichtung gelesen werden kann.

          Das abzuhörende Ereignis ist window.addEventListener("deviceorientationabsolute", setHeading) (kein Navigator-Ereignis!?). Und es verwendet auch einen Rückruf. In diesem Fall muss ein Winkel hinzugefügt werden, wenn sich das Gerät im Querformat befindet (und es kann im Querformat zwei Positionen haben). Die Bildschirmausrichtung lebt im Bildschirmobjekt.

          Auch hier macht Svelte wirklich alles einfach. Wenn sich etwas an den Funktionsargumenten ändert, wird die Funktion aufgerufen. Es ist wie der useEffect in Reagieren, aber besser!

          Dasselbe geschieht, um die Abrufdatenfunktion auszulösen. Wenn sich amenity , lon oder lat ändern, wird der Code erneut ausgeführt.

          Um die Daten zu zeichnen, habe ich den Code in eine Funktion drawCompass mit einer eigenen Datei draw-compass.ts unterteilt. Die Funktion verwendet die typischen Funktionen für Canvas, daher werde ich hier nicht den gesamten Code kopieren.

          Dieses Web ist ein klarer Kandidat für eine PWA, da es auf einem Mobilgerät mit Orientierungssensor viel besser ist. Dazu habe ich in Svelte ein einziges Beispiel gefunden.

          Als erstes fügte man die folgende Zeile zu public/index.html hinzu:

          <link rel=’manifest’ href=’manifest.json’>

          Und erstellen Sie die Datei manifest.json im selben Ordner:

          Einige Zeilen scheinen unnötig zu sein, aber wenn sie nicht vorhanden sind, erlaubt der Browser dem Benutzer nicht, die App auf dem Desktop zu speichern.

          Der nächste Schritt ist das Hinzufügen des Servicemitarbeiters. Dies ist auch notwendig. Es muss die Methode fetch haben, die oft weggelassen wird.

          • Seien Sie vorsichtig mit den Pfaden auf dem Cache! Wenn etwas fehlschlägt, wird der Service Worker nicht installiert.
          • Es gibt einen speziellen Abschnitt, um dies in den Entwicklungstools zu überprüfen (die ersten beiden auf der Registerkarte "Anwendung")

          Sobald dies erledigt ist, muss die Site auf das Ereignis beforeunnstallprompt hören:

          Sobald das Ereignis gespeichert ist, kann es durch Klicken auf eine Schaltfläche aufgerufen werden. Hier die Funktion zum Vorbereiten und die, die tatsächlich installiert wird:

          • Deinstallieren Sie die App, bevor Sie es erneut versuchen! Ich bin daran hängen geblieben und es ist wirklich frustrierend, weil nichts passiert und es ist schwer zu wissen, warum ... Um die App zu deinstallieren, öffne die App und klicke auf das zweite Symbol oben, wenn du dich auf einem Computer befindest.
          • Wenn die Funktion handleInstall nichts protokolliert, suchen Sie in den Entwicklungstools nach Tipps.
          • btnInstallAppVisible ist die Variable, die die Schaltfläche ausblendet, wenn die App installiert ist und die Schaltfläche nicht mehr benötigt wird.

          重新投影栅格数据 (Reprojizieren von Rasterdaten)

          Neuprojektion bedeutet, eine neue Darstellung für Ihre Rasterdaten basierend auf einem anderen crs (d. h. einem anderen Koordinatensystem), einer anderen Transformation (z. B. um das Raster zu drehen) oder anderen Grenzen zu finden. Dies kann Rotationen und Verzerrungen beinhalten, was Reprojektionen ziemlich komplex macht

          Der folgende Code projiziert einfach das angegebene Dataset in ein neues crs ( new_crs ) mit allen Änderungen an der zugrunde liegenden Transformation. Der Code liest einen Datensatz ein, leitet eine neue Transformation, Rasterhöhe und -breite ab, erstellt ein Array für die neu projizierten Daten ( new_imgdata ) und führt schließlich die Neuprojektion durch:

          以下代码仅将给定的数据集重新投影到新的crs( new_crs )中,并且对基础转换进行了任何更改。 该代码读取数据集,得出新的变换,栅格高度和宽度,为重新( new_imgdata )创建一个数组,最后执行重新投影:


          性能比较 ( Leistungsvergleich )

          Wie verhält sich die Abfragelogik von GeoTIFF.js gegenüber einem Aufruf von gdallocationinfo? Dies kann ein wenig davon abhängen, wie viele Dateien Sie öffnen (insbesondere wiederholt), aber meine Ergebnisse, sowohl experimentell als auch in der Praxis, waren entscheidend. Auf einem Solid State Drive habe ich dasselbe Raster (ca. 500 x 200 Pixel, mit 250 Bändern) mit demselben Breiten- und Längengrad abgefragt und die verstrichenen Millisekunden aufgezeichnet.

          如何将GeoTIFF.js查询逻辑与对 gdallocationinfo 的调用进行 gdallocationinfo ? 这可能取决于您打开的文件数量(尤其是重复打开的文件数量),但是我的实验和实践结果都是决定性的。 在固态驱动器上,我使用相同的纬度和经度查询了相同的栅格(大约500px x 200px,具有250条带),并记录了经过的毫秒数。

          exec(gdallocationinfo…)

          exec(gdallocationinfo . )

          Bei dieser Methode scheint es alle paar Durchläufe zufällige Schluckaufe zu geben, die sich nachteilig auf die Gesamtverarbeitungszeit auswirken. Dies wurde auf meinem Entwicklungscomputer zusätzlich zu meinen Servern festgestellt.

          Diese Bibliothek war nicht nur etwas schneller als ein Aufruf von gdallocationinfo , die Leistung war auch sehr konstant und halbierte die durchschnittliche Verarbeitungszeit fast.


          Schau das Video: GDAL Tutorial #2: Converting, Resampling, Reprojecting, Clipping (Oktober 2021).