Portanto, a GDAL adicionou recentemente um novo recurso que permite a leitura aleatória dos arquivos de bucket do S3. Estou procurando cortar imagens GDAL de vários blocos de uma imagem sem ter que baixar o arquivo inteiro. Eu só vi documentação muito esparsa sobre como configurar e acessar um bucket S3 através do GDAL e estou um pouco confuso sobre como começar? Alguém teria a gentileza de fornecer um exemplo / tutorial extremamente curto sobre como definir o sistema de arquivos virtual para o GDAL para atingir esse objetivo? Pontos extras se sua solução permitir que ele seja script via Python!
Para esclarecer: Já o fizemos em Python. O problema com o Python é que você precisa fazer o download de toda a imagem para operá-la. A versão mais recente do GDAL suporta a montagem do balde S3, para que, se precisarmos recortar uma pequena porção da imagem, possamos operar diretamente nessa porção menor. Infelizmente, como o recurso foi lançado apenas na filial estável em janeiro, não encontrei nenhuma documentação sobre ele. Portanto, a solução deve usar o sistema VSI3 na versão mais recente do GDAL ou usar o sistema de maneira inteligente para impedir que o usuário precise baixar a imagem inteira em uma unidade EBS para operar nela.
Ou seja, a recompensa será concedida por responder que usa as APIs VSI encontradas nas versões mais recentes do GDAL, para que todo o arquivo não precise ser lido na memória ou no disco. Além disso, nós, os buckets que usamos nem sempre são públicos, portanto muitos dos truques HTTP publicados não funcionarão em muitas de nossas situações.
fonte
Respostas:
Descobri que quando algo não está particularmente bem documentado no GDAL, é possível examinar os testes deles.
O
/vsis3
módulo de teste tem alguns exemplos simples, embora não tenha nenhum exemplo de leitura de partes de verdade.Reunimos o código abaixo com base no módulo de teste, mas não consigo fazer o teste, pois o GDAL / vsis3 exige credenciais e não tenho uma conta da AWS.
fonte
Como
/vsis3/
é implementado no GDAL, você também pode usarrasterio
para ler os conjuntos de dados do Windows S3. Isso requer que suas credenciais sejam configuradas para boto ou usando o manipulador de sessão rasterios da AWS .Veja também rasterios windowed-rw e documentos VSI .
fonte
Tente usar um arquivo XML para armazenar as informações do WMS, mais detalhes estão na documentação do GDAL WMS .
Aqui está um exemplo de arquivo XML WMS para recuperar dados da API de elevação da Mapzen:
Você pode então recortar em uma caixa delimitadora da seguinte maneira:
fonte
Não sei muito sobre os buckets S3, mas parece que é uma unidade de armazenamento em nuvem com autenticação usando serviços REST http. ou seja, poderia ser usado como um ponto de montagem comum, com um uri associado.
Se você procura cortar partes de imagens / varredura, o arquivo precisa estar em um formato apropriado.
Dê uma olhada na especificação do TMS http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification
(Talvez o netCDF também possa fazer o truque.)
O GDAL também lê e grava formatos TMS. Basicamente, é apenas uma estrutura de diretório padrão com alguns arquivos de metadados.
Agora, o truque é criar rapidamente o URL com os parâmetros de extensão geográfica por meio do driver TMS.
Dê uma olhada na documentação do driver OpenLayers TMS: http://dev.openlayers.org/docs/files/OpenLayers/Layer/TMS-js.html Para ver como ele lida com as solicitações com base na localização, zoom e extensão.
Claro que isso pode ser feito em Python. Você precisa primeiro criar o URI de "ponto de montagem" (ou caminho) apropriado com viscurl (de acordo com a documentação) e, depois de montado, vá para o bloco específico de acordo com a especificação TMS (que é uma extensão do caminho) .
fonte