¿Descarga productos centinela usando API?

11

Quiero poder automatizar o descargar por lotes los datos de Sentinel (en particular, S2).

Estoy tratando de usar el protocolo OData como se describe en la guía del usuario de Sentinels Scientific Data Hub sobre API y secuencias de comandos por lotes . Como ejemplo, trato de descargar un producto completo usando wget:

wget --no-check-certificate --user=username --password=usrpass "https://scihub.copernicus.eu/apihub/odata/v1/Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/$value"

(Con un nombre de usuario y contraseña registrados) pero acabo de recibir el index.html:

<?xml version='1.0' encoding='utf-8'?><entry xmlns="http://www.w3.org/2005/Atom" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xml:base="https://scihub.copernicus.eu/dhus/odata/v1/"><id>https://scihub.copernicus.eu/dhus/odata/v1/Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')</id><title type="text">S1A_IW_SLC__1SDV_20141023T172123_20141023T172150_002960_0035D1_9743</title><updated>2014-12-07T17:06:00.324Z</updated><category term="DHuS.Product" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/><link href="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')" rel="edit" title="Product"/><link href="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/$value" rel="edit-media" type="application/octet-stream"/><link href="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/Products" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Products" title="Products" type="application/atom+xml;type=feed"/><link href="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/Nodes" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Nodes" title="Nodes" type="application/atom+xml;type=feed"/><link href="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/Attributes" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Attributes" title="Attributes" type="application/atom+xml;type=feed"/><link href="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/Class" rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/Class" title="Class" type="application/atom+xml;type=entry"/><content type="application/octet-stream" src="Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/$value"/><m:properties><d:Id>18f7993d-eae1-4f7f-9d81-d7cf19c18378</d:Id><d:Name>S1A_IW_SLC__1SDV_20141023T172123_20141023T172150_002960_0035D1_9743</d:Name><d:ContentType>application/octet-stream</d:ContentType><d:ContentLength>8544532822</d:ContentLength><d:ChildrenNumber>2</d:ChildrenNumber><d:Value m:null="true"/><d:CreationDate>2014-12-07T17:06:00.324</d:CreationDate><d:IngestionDate>2014-12-07T17:06:00.324</d:IngestionDate><d:EvictionDate m:null="true"/><d:ContentDate m:type="DHuS.TimeRange"><d:Start>2014-10-23T17:21:23.23</d:Start><d:End>2014-10-23T17:21:50.495</d:End></d:ContentDate><d:Checksum m:type="DHuS.Checksum"><d:Algorithm>MD5</d:Algorithm><d:Value>C4415763B3198B7A2874C2A60B2CDCDC</d:Value></d:Checksum><d:ContentGeometry>&lt;gml:Polygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326" xmlns:gml="http://www.opengis.net/gml">
   &lt;gml:outerBoundaryIs>
      &lt;gml:LinearRing>
         &lt;gml:coordinates>41.289764,6.891860 41.685265,9.900283 40.048470,10.244140 39.652199,7.311233 41.289764,6.891860&lt;/gml:coordinates>
      &lt;/gml:LinearRing>
   &lt;/gml:outerBoundaryIs>
&lt;/gml:Polygon></d:ContentGeometry><d:Metalink>&lt;metalink xmlns="urn:ietf:params:xml:ns:metalink">&lt;file name ="S1A_IW_SLC__1SDV_20141023T172123_20141023T172150_002960_0035D1_9743.zip">&lt;url>https://scihub.copernicus.eu/dhus/odata/v1/Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/$value&lt;/url>&lt;/file>&lt;/metalink></d:Metalink></m:properties></entry>

Sin embargo, si pongo la consulta URI https://scihub.copernicus.eu/dhus/odata/v1/Products%28'18f7993d-eae1-4f7f-9d81-d7cf19c18378'%29/$valuedirectamente en el navegador, descarga el archivo zip del producto.

También intenté usar curl como se describe en una respuesta a esta pregunta

curl -u username:usrpass -JO "https://scihub.copernicus.eu/dhus/odata/v1/Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/$value"

pero me sale el error

Advertencia: ¡el nombre de archivo remoto no tiene longitud!

Todavía no puedo acceder al APIhub, solo al centro científico, (aunque un colega con acceso a APIhub también lo ha intentado y tuvo el mismo problema). Puedo utilizar la interfaz gráfica de usuario de Science Hub para descargar datos de forma interactiva, pero me gustaría poder automatizar el proceso. Hay scripts de python de terceros y scripts de shell, pero muchos usan el hub API, y me gustaría entender lo que estoy haciendo para poder desarrollar scripts específicos.

Colabean
fuente
¿Usó una versión de wget que se compila con soporte SSL? De lo contrario, SSL no funcionará.
Mate
No estoy seguro, creo que es el valor predeterminado con ubuntu 14. (wget -V GNU Wget 1.15 construido en linux-gnu. + Digest + https + ipv6 + iri + large-file + nls + ntlm + opie + ssl / openssl ) (Compilar: gcc -DHAVE_CONFIG_H -DSYSTEM_WGETRC = "/ etc / wgetrc" -DLOCALEDIR = "/ usr / share / locale" -I. -I ../../ src -I ../ lib -I ../ ../lib -D_FORTIFY_SOURCE = 2 -I / usr / include -g -O2 -fstack-protector --param = ssp-buffer-size = 4 -Wformat -Werror = format-security -DNO_SSLv2 -D_FILE_OFFSET_BITS = 64 -g - Muro)
Colabean
Ese no es el problema, ya que tiene el + ssl / openssl.
Mate

Respuestas:

7

Recibí ayuda de un desarrollador de aplicaciones en JNCC. Publicaré su respuesta aquí para ayudar a otros.

Mi problema era que antes necesitaba escapar del personaje $ value. entonces el comando wget debería leer (usando el apihub, que podría reemplazar con dhus):

wget --no-check-certificate --user=username --password=usrpass "https://scihub.copernicus.eu/apihub/odata/v1/Products('18f7993d-eae1-4f7f-9d81-d7cf19c18378')/\$value"

O para usar curl, su comando sugerido fue:

curl -u username:password -LkJO "https://scihub.copernicus.eu/dhus/odata/v1/Products('13e66985-7d1f-4a7c-be58-925e7ed7889d')/\$value"

Tenga en cuenta el $ escapado al final. Sin esto, la URL que se envía es https://scihub.copernicus.eu/dhus/odata/v1/Products ('13e66985-7d1f-4a7c-be58-925e7ed7889d') / Si prueba esta url en un navegador, obtendrá un Descripción html del producto.

Colabean
fuente
El curlmétodo funciona para mí, pero recibo un error de autenticación cuando lo uso wget.
philiporlando
7

Una buena alternativa al Scihub oficial son los datos reflejados de Sentinel-2 en Amazon Web Services.

Sentinel-2 en AWS

Esto tiene la ventaja de un mejor tiempo de actividad y los productos ya están guardados en sus mosaicos MGRS, lo que hace que la descarga sea mucho más rápida.

Los datos se almacenan en un depósito público con el esquema tiles/[UTM code]/latitude band/square/[year]/[month]/[day]/[sequence]/DATA. Esto hace que la descarga iterativa y programada de todas las escenas disponibles en un área sea muy fácil.

Si está interesado en la búsqueda programática y la descarga de datos desde Scihub, también puede usar la herramienta Python Sentinelsat .

Kersten
fuente
3

Sugeriría utilizar la API sentinelsat Python para esto. Especialmente si su objetivo es la descarga por lotes.

Vea a continuación un código de ejemplo para descargar Sentinel- 2 (Código ejecutado desde Spyder)

#First, import this library (sentinelsat)
from sentinelsat import SentinelAPI, read_geojson, geojson_to_wkt
from datetime import date

api = SentinelAPI('user', 'password', 'https://scihub.copernicus.eu/dhus')

# search by polygon, time, and SciHub query keywords
footprint = geojson_to_wkt(read_geojson(r'/path/to/map.geojson'))
products = api.query(footprint,
                     date=('20151219', date(2015, 12, 29)),
                     platformname='Sentinel-2',
                     cloudcoverpercentage=(0, 30))

#Download all products 
api.download_all(products)

Para su información, si está buscando datos en todo el país, divida el AOI en archivos de forma más pequeños, ya que tuve este problema en el que no arrojó resultados cuando mi AOI era demasiado grande.

Lea esto para obtener más información: https://buildmedia.readthedocs.org/media/pdf/sentinelsat/master/sentinelsat.pdf

También hay opciones para la descarga por lotes de Sentinel-1 también.

Rhodri_22
fuente
¿Funcionó esto para ti?
Rhodri_22