Daher hat GDAL kürzlich eine neue Funktion hinzugefügt , mit der S3-Bucket-Dateien nach dem Zufallsprinzip gelesen werden können. Ich möchte GDAL-Bilder aus mehreren Kacheln eines Bildes zuschneiden, ohne die gesamte Datei herunterladen zu müssen. Ich habe nur eine sehr spärliche Dokumentation zum Konfigurieren und Zugreifen auf einen S3-Bucket durch GDAL gesehen und bin ein wenig verwirrt, wie ich anfangen soll. Wäre jemand so freundlich, ein extrem kurzes Beispiel / Tutorial zu geben, wie man das virtuelle Dateisystem für GDAL einrichten würde, um dieses Ziel zu erreichen? Bonuspunkte, wenn Ihre Lösung die Skripterstellung über Python ermöglicht!
Zur Verdeutlichung: Wir haben es bereits in Python gemacht. Das Problem mit Python ist, dass Sie das gesamte Image herunterladen müssen, um es damit zu betreiben. Die neueste Version von GDAL unterstützt die Montage des S3-Buckets. Wenn Sie also einen kleinen Teil des Bildes beschneiden möchten, können Sie diesen kleineren Teil direkt bearbeiten. Leider habe ich keine Dokumentation dazu gefunden, da das Feature erst im Januar im Stable-Zweig veröffentlicht wurde. Daher sollte die Lösung das VSI3-System in der neuesten Version von GDAL verwenden oder das System auf andere Weise intelligent einsetzen, um zu verhindern, dass der Benutzer das gesamte Image auf ein EBS-Laufwerk herunterladen muss, um es zu bearbeiten.
Das heißt, die Prämie wird für Antworten vergeben, die die in den neuesten Versionen von GDAL enthaltenen VSI-APIs verwenden, sodass nicht die gesamte Datei in den Arbeitsspeicher oder auf die Festplatte eingelesen werden muss. Außerdem sind die von uns verwendeten Buckets nicht immer öffentlich, sodass viele der veröffentlichten HTTP-Tricks in vielen unserer Situationen nicht funktionieren.
quelle
Antworten:
Ich habe festgestellt, dass es nützlich sein kann, die Tests durchzusehen, wenn etwas in GDAL nicht besonders gut dokumentiert ist.
Das
/vsis3
Testmodul enthält einige einfache Beispiele, jedoch keine Beispiele für das tatsächliche Lesen von Chunks.Ich habe den folgenden Code basierend auf dem Testmodul zusammengestellt, kann ihn jedoch nicht testen, da für GDAL / vsis3 Anmeldeinformationen erforderlich sind und ich kein AWS-Konto habe.
quelle
Da dies
/vsis3/
in GDAL implementiert ist, können Sie auchrasterio
Windows von S3-Datensätzen lesen. Dazu müssen entweder Ihre Anmeldeinformationen für Boto eingerichtet sein oder Sie müssen den Rasterios AWS-Sitzungshandler verwenden .Siehe auch rasterios windowed -rw- und VSI- Dokumente.
quelle
Versuchen Sie, eine XML-Datei zum Speichern der WMS-Informationen zu verwenden. Weitere Informationen finden Sie in der GDAL WMS-Dokumentation .
Hier ist eine Beispiel-WMS-XML-Datei zum Abrufen von Daten aus Mapzens Elevation-API:
Sie können dann wie folgt einen Begrenzungsrahmen anclipsen:
quelle
Ich weiß nicht viel über S3-Buckets, aber es scheint, dass es sich um ein Cloud-Speicherlaufwerk mit Authentifizierung mithilfe von http-REST-Diensten handelt. dh könnte als gewöhnlicher Befestigungspunkt mit einem zugehörigen URI verwendet werden.
Wenn Sie Teile von Bildern / Rastern zuschneiden möchten, muss die Datei ein geeignetes Format haben.
Schauen Sie sich die TMS-Spezifikation http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification an
(Vielleicht könnte netCDF auch den Trick machen.)
GDAL liest und schreibt auch TMS-Formate. Grundsätzlich handelt es sich nur um eine Standardverzeichnisstruktur mit einigen Metadatendateien.
Jetzt besteht der Trick darin, die URL mit den geografischen Ausdehnungsparametern im Handumdrehen über den TMS-Treiber zu erstellen.
Sehen Sie sich die OpenLayers TMS-Treiberdokumentation an: http://dev.openlayers.org/docs/files/OpenLayers/Layer/TMS-js.html. Hier erfahren Sie, wie die Anforderungen basierend auf Position, Zoom und Umfang verarbeitet werden.
Natürlich kann es in Python gemacht werden. Sie müssen zuerst den entsprechenden "Montagepunkt" (oder Pfad) -URI mit viscurl erstellen (gemäß der Dokumentation) und dann nach dem Mounten zu der spezifischen Kachel gemäß der TMS-Spezifikation gehen (die eine Erweiterung des Pfads darstellt). .
quelle