Fazendo o download de produtos sentinela usando a API?

11

Quero poder automatizar ou fazer download em lote de dados do Sentinel (em particular o S2).

Estou tentando usar o protocolo OData, conforme descrito no guia do usuário do Sentinels Scientific Data Hub sobre APIs e scripts em lote . Como exemplo, tento baixar um produto completo usando o wget:

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

(Com um nome de usuário e senha registrados), mas eu apenas recebo o 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>

No entanto, se eu colocar a consulta URI https://scihub.copernicus.eu/dhus/odata/v1/Products%28'18f7993d-eae1-4f7f-9d81-d7cf19c18378'%29/$valuediretamente no navegador, ela fará o download do arquivo zip do produto.

Eu também tentei usar curl como descrito em uma resposta a esta pergunta

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

mas eu recebo o erro

Aviso: o nome do arquivo remoto não tem tamanho!

Ainda não consigo acessar o APIhub, apenas o hub de ciências (embora um colega com acesso ao APIhub também tenha tentado isso e tenha o mesmo problema). Sou capaz de usar o gui do hub científico para fazer o download interativo de dados, mas gostaria de poder automatizar o processo. Existem scripts python e shell scripts de terceiros, mas muitos usam o hub da API e eu gostaria de entender o que estou fazendo para desenvolver scripts específicos.

Colabean
fonte
Você usou uma versão do wget que é compilada com suporte a ssl? Caso contrário, o ssl não funcionará.
Matte
Não tenho certeza, acho que é o padrão do ubuntu 14. (wget -V GNU Wget 1.15 construído em linux-gnu. + Digest + https + ipv6 + iri + arquivo grande + nls + ntlm + opie + ssl / openssl ) (Compile: 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 - Wall)
Colabean
Esse não é o problema, pois você tem o + ssl / openssl.
Matte

Respostas:

7

Recebi ajuda de um desenvolvedor de aplicativos da JNCC. Vou postar sua resposta aqui para ajudar os outros.

Meu problema era que eu precisava escapar do caractere $ antes value. então o comando wget deve ler (usando o apihub, que você pode substituir pelo dhus):

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

Ou, para usar curl, seu comando sugerido foi:

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

Observe o $ escapado no final. Sem isso, o URL enviado é https://scihub.copernicus.eu/dhus/odata/v1/Products ('13e66985-7d1f-4a7c-be58-925e7ed7889d') / Se você tentar esse URL em um navegador, obterá um descrição html do produto.

Colabean
fonte
O curlmétodo está funcionando para mim, mas estou recebendo um erro de autenticação ao usar wget.
Philiporlando 03/04/19
7

Uma boa alternativa ao Scihub oficial são os dados espelhados do Sentinel-2 no Amazon Web Services.

Sentinel-2 na AWS

Isso tem a vantagem de melhorar o tempo de atividade e os produtos já estão salvos em seus blocos MGRS, o que torna o download muito mais rápido.

Os dados são armazenados em um depósito público com o esquema tiles/[UTM code]/latitude band/square/[year]/[month]/[day]/[sequence]/DATA. Isso facilita muito o download iterativo e com script de todas as cenas disponíveis em uma área.

Se você estiver interessado na pesquisa programática e no download de dados do Scihub, também poderá usar a ferramenta Sentinelsat do Python .

Kersten
fonte
3

Eu sugeriria o uso da API sentinelsat Python para isso. Especialmente se seu objetivo for o download em lote.

Veja abaixo alguns exemplos de código para download do Sentinel-2 (código executado no 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 sua informação, se você estiver procurando dados em todo o país, divida a AOI em shapefiles menores, pois eu tive esse problema em que ele não retornou resultados quando minha AOI era muito grande.

Leia isto para obter mais informações: https://buildmedia.readthedocs.org/media/pdf/sentinelsat/master/sentinelsat.pdf

Também existem opções para o download em lote do Sentinel-1.

Rhodri_22
fonte
Isso funcionou para você?
Rhodri_22 31/07/19