Por lo tanto, GDAL ha agregado recientemente una nueva característica que permite la lectura aleatoria de archivos de cubo S3. Estoy buscando recortar imágenes GDAL de múltiples mosaicos de una imagen sin tener que descargar todo el archivo. Solo he visto documentación muy escasa sobre cómo configurar y acceder a un bucket S3 a través de GDAL y estoy un poco confundido sobre cómo comenzar. ¿Alguien tendría la amabilidad de proporcionar un ejemplo / tutorial extremadamente breve sobre cómo se haría para configurar el sistema de archivos virtual para GDAL para lograr este objetivo? ¡Ptos de bonificación si su solución permite que se realice una secuencia de comandos a través de Python!
Para aclarar: ya lo hemos hecho en Python. El problema con Python es que tienes que descargar toda la imagen para operarla con ella. La versión más nueva de GDAL tiene soporte para montar el cubo S3 de modo que si necesitamos recortar una pequeña porción de la imagen, podamos operar directamente en esa porción más pequeña. Por desgracia, como la característica solo se lanzó en la rama estable en enero, no he encontrado ninguna documentación al respecto. Por lo tanto, la solución debería usar el sistema VSI3 en la versión más reciente de GDAL o usar el sistema de manera inteligente para evitar que el usuario necesite descargar la imagen completa a una unidad EBS para operarla.
Es decir, se otorgará la recompensa por la respuesta que utiliza las API de VSI que se encuentran en las versiones más recientes de GDAL para que no sea necesario leer todo el archivo en la memoria o el disco. Además, los cubos que usamos no siempre son públicos, por lo que muchos de los trucos HTTP que se publican no funcionarán en muchas de nuestras situaciones.
fuente
Respuestas:
Descubrí que cuando algo no está particularmente bien documentado en GDAL, mirar a través de sus pruebas puede ser útil.
El
/vsis3
módulo de prueba tiene algunos ejemplos simples, aunque no tiene ningún ejemplo de leer fragmentos en realidad.He improvisado el siguiente código basado en el módulo de prueba, pero no puedo probarlo porque GDAL / vsis3 requiere credenciales y no tengo una cuenta de AWS.
fuente
Ya que
/vsis3/
está implementado en GDAL, también puede usarlorasterio
para leer Windows de conjuntos de datos S3. Esto requiere que sus credenciales estén configuradas para boto o que use el controlador de sesión de rasterios AWS .Ver también rasterios windowed-rw y documentos VSI .
fuente
Intente utilizar un archivo XML para almacenar la información de WMS, encontrará más detalles en la documentación de GDAL WMS .
Aquí hay un ejemplo de archivo WMS XML para recuperar datos de la API de Elevación de Mapzen:
Luego puede recortar a un cuadro delimitador de la siguiente manera:
fuente
No sé mucho sobre los cubos S3, pero parece que es una unidad de almacenamiento en la nube con autenticación que utiliza los servicios http REST. es decir, podría usarse como un punto de montaje ordinario, con una uri asociada.
Si está buscando recortar partes de imágenes / ráster, entonces el archivo debe estar en un formato apropiado.
Eche un vistazo a la especificación TMS http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification
(Quizás netCDF también podría hacer el truco).
GDAL también lee y escribe formatos TMS. Básicamente es solo una estructura de directorio estándar con algunos archivos de metadatos.
Ahora, el truco es crear sobre la marcha la url con los parámetros de extensión geográfica a través del controlador TMS.
Eche un vistazo a la documentación del controlador OpenLayers TMS: http://dev.openlayers.org/docs/files/OpenLayers/Layer/TMS-js.html Para ver cómo maneja las solicitudes en función de la ubicación, el zoom y la extensión.
Por supuesto que se puede hacer en Python. Primero debe crear el URI apropiado del "punto de montaje" (o ruta) con viscurl (de acuerdo con la documentación) y luego, una vez montado, vaya al mosaico específico de acuerdo con la especificación TMS (que es una extensión de la ruta) .
fuente