Итак, GDAL недавно добавил новую функцию, которая позволяет произвольно читать файлы S3 Bucket. Я хочу обрезать изображения GDAL из нескольких фрагментов изображения, не загружая весь файл. Я только видел очень скудную документацию о том, как настроить и получить доступ к корзине S3 через GDAL, и я немного запутался, как начать? Будет ли кто-то достаточно любезен, чтобы предоставить чрезвычайно короткий пример / учебник о том, как можно настроить виртуальную файловую систему для GDAL для достижения этой цели? Бонусные баллы, если ваше решение позволяет создавать сценарии через Python!
Чтобы уточнить: мы уже сделали это на Python. Проблема с Python заключается в том, что вам нужно загрузить весь образ, чтобы работать с ним. Новейшая версия GDAL имеет поддержку для монтажа корзины S3, так что если нам нужно обрезать небольшую часть изображения, мы можем работать непосредственно с этой меньшей частью. Увы, поскольку эта функция была выпущена только в стабильной ветке в январе, я не нашел никакой документации по ней. Таким образом, решение должно использовать систему VSI3 в новейшей версии GDAL или иным образом разумно использовать систему, чтобы пользователю не требовалось загружать весь образ на диск EBS для работы с ним.
То есть награда будет присуждена за ответ, использующий API-интерфейсы VSI, обнаруженные в новейших версиях GDAL, так что весь файл не нужно будет читать в память или на диск. Кроме того, мы, используемые нами блоки, не всегда общедоступны, поэтому многие публикуемые трюки HTTP не будут работать во многих наших ситуациях.
источник
Ответы:
Я обнаружил, что когда что-то не очень хорошо задокументировано в GDAL, просмотр их тестов может быть полезным.
У
/vsis3
тестового модуля есть несколько простых примеров, хотя у него нет примеров реального чтения фрагментов.Я собрал код ниже, основанный на тестовом модуле, но я не могу протестировать, поскольку GDAL / vsis3 требует учетные данные, и у меня нет учетной записи AWS.
источник
Так
/vsis3/
как реализован в GDAL, вы также можете использоватьrasterio
для чтения Windows наборов данных S3. Это требует либо учетные данные , которые будут созданы для Бота или с помощью rasterios AWS обработчика сеанса .Смотрите также растровые документы windowed -rw и VSI .
источник
Попробуйте использовать файл XML для хранения информации WMS, более подробную информацию можно найти в документации по GDAL WMS .
Вот пример XML-файла WMS для извлечения данных из Elevation API Mapzen:
Затем вы можете закрепить ограничивающую рамку следующим образом:
источник
Я не очень разбираюсь в сегментах S3, но, похоже, это облачный накопитель с аутентификацией с использованием служб http REST. т.е. может быть использован в качестве обычной точки крепления, с соответствующей URI.
Если вы ищете обрезку частей изображения / растра, тогда файл должен быть в соответствующем формате.
Посмотрите на спецификацию TMS http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification
(Возможно, netCDF также может помочь.)
GDAL также читает и записывает форматы TMS. По сути, это только стандартная структура каталогов с некоторыми файлами метаданных.
Теперь хитрость заключается в создании на лету URL-адреса с параметрами географического экстента через драйвер TMS.
Взгляните на документацию драйвера OpenLayers TMS: http://dev.openlayers.org/docs/files/OpenLayers/Layer/TMS-js.html Чтобы узнать, как он обрабатывает запросы на основе местоположения, масштаба и экстентов.
Конечно, это можно сделать на Python. Сначала необходимо создать соответствующий URI «точки монтирования» (или пути) с помощью viscurl (согласно документации), а затем, после монтирования, перейти к определенной плитке в соответствии со спецификацией TMS (которая является расширением пути). ,
источник