Sentinel-Produkte über API herunterladen?

11

Ich möchte Sentinel-Daten (insbesondere S2) automatisieren oder stapelweise herunterladen können.

Ich versuche, das OData-Protokoll wie im Sentinels Scientific Data Hub-Benutzerhandbuch zu APIs und Batch-Skripten beschrieben zu verwenden . Als Beispiel versuche ich, ein komplettes Produkt mit wget herunterzuladen:

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

(Mit einem registrierten Benutzernamen und Passwort) aber ich erhalte nur die 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>

Wenn ich die URI-Abfrage jedoch https://scihub.copernicus.eu/dhus/odata/v1/Products%28'18f7993d-eae1-4f7f-9d81-d7cf19c18378'%29/$valuedirekt in den Browser stelle, wird die Zip-Datei des Produkts heruntergeladen.

Ich habe auch versucht, Curl zu verwenden, wie in einer Antwort auf diese Frage beschrieben

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

aber ich bekomme den Fehler

Warnung: Remote-Dateiname hat keine Länge!

Ich kann noch nicht auf den APIhub zugreifen, nur auf den Science Hub (obwohl ein Kollege mit APIhub-Zugriff dies ebenfalls versucht hat und das gleiche Problem hatte). Ich kann die Science Hub-GUI verwenden, um Daten interaktiv herunterzuladen, möchte aber den Prozess automatisieren können. Es gibt Python-Skripte und Shell-Skripte von Drittanbietern, aber viele verwenden den API-Hub, und ich möchte verstehen, was ich tue, damit ich bestimmte Skripte entwickeln kann.

Colabean
quelle
Haben Sie eine Wget-Version verwendet, die mit SSL-Unterstützung kompiliert wurde? Sonst funktioniert ssl nicht.
Matte
Ich bin mir nicht sicher, ich denke, es ist die Standardeinstellung mit Ubuntu 14. (wget -V GNU Wget 1.15 basiert auf Linux-Gnu. + Digest + https + ipv6 + iri + große Datei + nls + ntlm + opie + ssl / openssl ) (Kompiliere: 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 = Formatsicherheit -DNO_SSLv2 -D_FILE_OFFSET_BITS = 64 -g - Wand)
Colabean
Das ist dann nicht das Problem, da Sie die + ssl / openssl haben.
Matte

Antworten:

7

Ich erhielt Hilfe von einem Anwendungsentwickler bei JNCC. Ich werde ihre Antwort hier veröffentlichen, um anderen zu helfen.

Mein Problem war, dass ich vorher dem $ -Zeichen entkommen musste value. Daher sollte der Befehl wget lauten (unter Verwendung des Apihubs, den Sie durch Dhus ersetzen können):

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

Oder um Curl zu verwenden, war sein vorgeschlagener Befehl:

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

Beachten Sie das maskierte $ am Ende. Ohne dies lautet die gesendete URL https://scihub.copernicus.eu/dhus/odata/v1/Products ('13e66985-7d1f-4a7c-be58-925e7ed7889d') / Wenn Sie diese URL in einem Browser versuchen, erhalten Sie eine HTML-Beschreibung des Produkts.

Colabean
quelle
Die curlMethode funktioniert für mich, aber bei der Verwendung wird ein Authentifizierungsfehler angezeigt wget.
philiporlando
7

Eine gute Alternative zum offiziellen Scihub sind die gespiegelten Sentinel-2-Daten auf Amazon Web Services.

Sentinel-2 unter AWS

Dies hat den Vorteil einer besseren Verfügbarkeit und die Produkte sind bereits in ihren MGRS-Kacheln gespeichert, was das Herunterladen erheblich beschleunigt.

Die Daten werden mit dem Schema in einem öffentlichen Bucket gespeichert tiles/[UTM code]/latitude band/square/[year]/[month]/[day]/[sequence]/DATA. Dies macht das iterative Herunterladen aller verfügbaren Szenen über einen Bereich per Skript sehr einfach.

Wenn Sie an der programmgesteuerten Suche und dem Herunterladen von Daten aus dem Scihub interessiert sind, können Sie auch das Python-Tool Sentinelsat verwenden .

Kersten
quelle
3

Ich würde vorschlagen, hierfür die sentinelsat Python-API zu verwenden. Vor allem, wenn Ihr Ziel der Batch-Download ist.

Unten finden Sie einen Beispielcode für den Sentinel-2-Download (Code von 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)

Zu Ihrer Information, wenn Sie nach landesweiten Daten suchen, teilen Sie den AOI in kleinere Shapefiles auf, da ich dieses Problem hatte, bei dem keine Ergebnisse zurückgegeben wurden, wenn mein AOI zu groß war.

Lesen Sie dies für weitere Informationen: https://buildmedia.readthedocs.org/media/pdf/sentinelsat/master/sentinelsat.pdf

Es gibt auch Optionen für den Batch-Download von Sentinel-1.

Rhodri_22
quelle
Hat das für dich funktioniert?
Rhodri_22