GDAL niedawno dodał nową funkcję, która pozwala na losowy odczyt plików segmentu S3. Chcę przyciąć obrazy GDAL z wielu kafelków obrazu bez konieczności pobierania całego pliku. Widziałem tylko bardzo rzadką dokumentację, jak skonfigurować i uzyskiwać dostęp do segmentu S3 przez GDAL i jestem trochę zdezorientowany, jak zacząć? Czy ktoś byłby na tyle uprzejmy, aby podać wyjątkowo krótki przykład / samouczek na temat ustawiania wirtualnego systemu plików dla GDAL, aby osiągnąć ten cel? Bonus pts, jeśli twoje rozwiązanie pozwala na skryptowanie go w Pythonie!
Aby wyjaśnić: już to zrobiliśmy w Pythonie. Problem z Pythonem polega na tym, że musisz pobrać cały obraz, aby go obsługiwać. Najnowsza wersja GDAL ma obsługę montażu łyżki S3, dzięki czemu jeśli chcemy powiedzieć przycięcie niewielkiej części obrazu, możemy operować bezpośrednio na tej mniejszej części. Niestety, ponieważ funkcja ta została wydana tylko w stabilnym oddziale w styczniu, nie znalazłem żadnej dokumentacji na jej temat. Tak więc rozwiązanie powinno wykorzystywać system VSI3 w najnowszej wersji GDAL lub w inny sposób inteligentnie korzysta z systemu, aby uniemożliwić użytkownikowi pobranie całego obrazu na dysk EBS w celu jego obsługi.
Oznacza to, że nagroda zostanie przyznana za odpowiedź, która korzysta z interfejsów API VSI znalezionych w najnowszych wersjach GDAL, dzięki czemu cały plik nie musi być wczytywany do pamięci lub dysku. Ponadto my, wiadra, których używamy, nie zawsze są publiczne, więc wiele opublikowanych sztuczek HTTP nie będzie działać w wielu naszych sytuacjach.
źródło
Odpowiedzi:
Odkryłem, że gdy coś nie jest szczególnie dobrze udokumentowane w GDAL, przeglądanie ich testów może być przydatne.
/vsis3
Moduł testowy ma kilka prostych przykładów, chociaż nie ma żadnych przykładów faktycznie czytanie fragmentów.Zebrałem poniższy kod w oparciu o moduł testowy, ale nie jestem w stanie przetestować, ponieważ GDAL / vsis3 wymaga poświadczeń i nie mam konta AWS.
źródło
Ponieważ
/vsis3/
jest zaimplementowany w GDAL, możesz także używaćrasterio
do odczytu Windows zestawów danych S3. Wymaga to skonfigurowania poświadczeń dla boto lub korzystania z modułu obsługi sesji rasterios AWS .Zobacz także dokumenty rasterios windowed -rw i VSI .
źródło
Spróbuj użyć pliku XML do przechowywania informacji WMS, więcej szczegółów znajduje się w dokumentacji GDAL WMS .
Oto przykładowy plik XML WMS do pobierania danych z interfejsu API Elevation Mapzen:
Następnie możesz przypiąć do ramki granicznej w następujący sposób:
źródło
Nie wiem dużo o segmentach S3, ale wygląda na to, że jest to pamięć masowa w chmurze z uwierzytelnianiem za pomocą usług HTTP REST. tzn. może być stosowany jako zwykły punkt montażowy z powiązanym urim.
Jeśli szukasz przycinania części obrazów / rastra, plik musi mieć odpowiedni format.
Spójrz na specyfikację TMS http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification
(Być może netCDF może również załatwić sprawę.)
GDAL odczytuje i zapisuje również formaty TMS. Zasadniczo jest to tylko standardowa struktura katalogów z niektórymi plikami metadanych.
Teraz sztuką jest tworzenie w locie adresu URL z parametrami zasięgu geograficznego za pośrednictwem sterownika TMS.
Zobacz dokumentację sterownika OpenLayers TMS: http://dev.openlayers.org/docs/files/OpenLayers/Layer/TMS-js.html Aby zobaczyć, jak obsługuje żądania na podstawie lokalizacji, powiększenia i zakresu.
Oczywiście można to zrobić w Pythonie. Najpierw musisz utworzyć odpowiedni „punkt montowania” (lub ścieżkę) identyfikatora URI z wiskurem (zgodnie z dokumentacją), a następnie, po zamontowaniu, przejdź do konkretnego kafelka zgodnie ze specyfikacją TMS (będącą przedłużeniem ścieżki) .
źródło