Conoce en este tutorial cómo buscar y descargar imágenes Sentinel-2 usando Sentinelsat de Python en un sistema operativo de Windows paso a paso.
Introducción al programa Copernicus de observación de la Tierra
El programa Copernicus es un programa de observación de la Tierra diseñado para ofrecer información de la superficie terrestre y mejorar la gestión del medio ambiente, garantizar la seguridad ciudadana y comprender y mitigar los efectos del cambio climático. Esta iniciativa está liderada por la Comisión Europea (CE), en colaboración con la Agencia Espacial Europea (ESA).
La ESA ha desarrollado cinco familias de misiones de observación de la Tierra llamadas Sentinel para atender a las necesidades del programa Copernicus. Actualmente están en funcionamiento y es posible descargarse imágenes de las siguientes misiones:
- Sentinel-1
- Sentinel-2
- Sentinel-3
La política de datos gratuita, completa y abierta adoptada para el programa Copernicus prevé el acceso y descarga para todos los usuarios de los productos Sentinel. Para ello solo es necesario registrarse de manera gratuita a través del siguiente enlace: https://scihub.copernicus.eu/dhus/#/home
En ocasiones, puede darse el caso que queramos realizar la descarga masiva de imágenes Sentinel, por lo que lo más recomendable es realizar un procedimiento de búsqueda y descarga automática. Para ello, el paquete de Python sentinelsat es una buena opción, ya que Python es un lenguaje de programación de alto nivel, relativamente fácil de entender y uno de los lenguajes más populares para scripting y automatización de tareas en entornos GIS.
En esta entrada del blog pretendemos mostrar el procedimiento de búsqueda y descarga de varias imágenes Sentinel-2 usando sentinelsat de Python en el sistema operativo de Windows. Debemos tener en cuenta los siguientes pasos a realizar en este proceso:
- Registrarse en Copernicus Hub para obtener un usuario y contraseña.
- Instalar el paquete sentinelsat en Python.
- Desarrollar el script de descargar dentro de la consola de Python en QGIS
Para más detalles, en el siguiente enlace podremos ver más información acerca de esta API de Python:
https://sentinelsat.readthedocs.io/en/stable/api.html#quickstart
Instalación de librería sentinelsat en PC
La forma más fácil de instalar paquetes o librerías de Python para QGIS es realizarlo mediante la consola que proporciona OSGeo4W, que se instala por defecto con QGIS.
Para instalar paquete debemos abrir la Consola (Shell) de OSGeo4W Shell (como Administrador), e instalaremos pip, una herramienta para la instalación automática de paquetes de Python. Posteriormente, a través de pip, instalaremos el paquete sentinelsat. Para ello, introducimos los siguientes comandos uno a uno:
py3_env
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
pip install sentinelsat
En función de la configuración de las variables de entorno y de la versión de QGIS como de Python, esta forma de instalación puede variar. En ese caso es recomendable visitar la web de la API de la librería o paquete que queramos instalar.
Script de descargar dentro de la consola de Python en QGIS
Ir a QGIS y crear un nuevo script en la consola de Python.
Importamos librerías y conectamos a la API de sentinelsat usando las credenciales de acceso a Copernicus Hub. Guardamos la conexión en una variable llamada api:
from sentinelsat import *
user = «Your Copernicus Hub User»
password = «Your Copernicus Hub Password»
api = SentinelAPI(user, password,’https://scihub.copernicus.eu/dhus’,show_progressbars=True)
A continuación, vamos a crear un punto que servirá como uno de los parámetros para realizar la solicitud de búsqueda de las imágenes. Para ello crearemos objeto de tipo QgsPointXY y lo guardamos en una variable llamada point en cuyos parámetros le vamos a pasar las coordenadas X e Y del lugar donde queremos descargar las imágenes (en este ejemplo son las coordenadas de Madrid). Posteriormente creamos una geometría utilizando el método fromPointXY() de la clase QgsGeometry, pasándole como parámetro el objeto point creado anteriormente, y usando la función asWkt() para pasarlo al formato de objetos espaciales vectoriales WKT (requerido en este caso por sentinelsat).
point = QgsPointXY(-3.70256, 40.4165)
geom = QgsGeometry.fromPointXY(point).asWkt()
A continuación, iniciamos la solicitud de búsqueda de las imágenes a través del método query y guardándolo en una variable llamada products, indicando como parámetros de entrada la geometría del punto realizado anteriormente, el rango de fechas de las imágenes, la plataforma que tiene el sensor que adquiere las imágenes, el rango de cobertura nubosa deseada y el tipo de producto que queremos descargar.
products = api.query (geom, platformname = ‘Sentinel-2′, cloudcoverpercentage = (0, 100), producttype=’S2MSI1C’, date = («20201001″,»20201010»))
Para saber que más parámetros podemos incluir en la consulta recomendamos ver la API de sentinelsat.
https://sentinelsat.readthedocs.io/en/stable/api.html#module-sentinelsat
Finalmente, para descargar las imágenes, usamos el método downloas_all, indicando como parámetros de entrada la variable products con la búsqueda de imágenes, y la ruta del directorio de nuestro PC donde queremos guardar las imágenes.
api.download_all(products, directory_path=r’C:data’)
El script completo sería así:
from sentinelsat import *
user = «Your Copernicus Hub User»
password = «Your Copernicus Hub Password»
api = SentinelAPI(user, password, ‘https://scihub.copernicus.eu/dhus’,show_progressbars=True)
point = QgsPointXY(-3.70256, 40.4165)
geom = QgsGeometry.fromPointXY(point).asWkt()
products = api.query (geom, platformname = ‘Sentinel-2′, cloudcoverpercentage = (0, 100),producttype=’S2MSI1C’, date = («20201001″,»20201010»))
api.download_all(products, directory_path=r’C:data’)
José María Sánchez es docente de los cursos Programación en QGIS con Python (PyQGIS) y Teledetección Aplicada a Proyectos Ambientales con software libre QGIS
Buenas, gracias por la publicación, muy útil.
Una pregunta, esas imágenes descargadas habría que georeferenciarlas y hacerles algún otro tratamiento antes de calcular algún índice como el NVDI, o ya vendrían tratadas y no seria necesario hacer nada.
Gracias.