Projektionen

Earth Engine ist so konzipiert, dass Sie sich bei Berechnungen nur selten um Kartenprojektionen kümmern müssen. Wie bei der Skalierung wird die Projektion, in der Berechnungen erfolgen, auf Pull-Basis bestimmt. Insbesondere werden Eingaben in der Ausgabeprojektion angefordert. Die Ausgabe kann über einen Funktionsparameter (z.B. crs), den Code-Editor und geemap-Kartenobjekte (mit der Projektion maps mercator (EPSG:3857)) oder mit einem reproject()-Aufruf bestimmt werden. Wenn Sie Bilder im Code-Editor oder in geemap anzeigen, werden Eingaben in Maps Mercator angefordert. Betrachten Sie den folgenden Vorgang für ein MODIS-Bild mit einer sinusförmigen Projektion:

Code-Editor (JavaScript)

// The input image has a SR-ORG:6974 (sinusoidal) projection.
var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0);

// Normalize the image and add it to the map.
var rescaled = image.unitScale(-2000, 10000);
var visParams = {min: 0.15, max: 0.7};
Map.addLayer(rescaled, visParams, 'Rescaled');

Python einrichten

Weitere Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung finden Sie auf der Seite Python-Umgebung.

import ee
import geemap.core as geemap

Colab (Python)

# The input image has a SR-ORG:6974 (sinusoidal) projection.
image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0)

# Normalize the image and add it to the map.
rescaled = image.unitScale(-2000, 10000)
vis_params = {'min': 0.15, 'max': 0.7}
m = geemap.Map()
m.add_layer(rescaled, vis_params, 'Rescaled')
m

Die Reihenfolge der Vorgänge für dieses Codebeispiel ist in Abbildung 1 dargestellt. Die Projektion der Eingabe wird durch die Ausgabe bestimmt, insbesondere durch die Mercator-Projektion der Kartendarstellung im Code-Editor. Diese Projektion wird durch die Abfolge der Vorgänge zurückgegeben, sodass die Eingaben in der Mercator-Projektion mit einem Maßstab angefordert werden, der durch die Zoomstufe der Karte bestimmt wird.

Projektion
Abbildung 1. Flussdiagramm der Vorgänge, die der Anzeige eines MODIS-Bilds auf der Karte im Code-Editor entsprechen. Die Prognosen (linke Seite des Flussdiagramms) für die einzelnen Vorgänge werden aus der Ausgabe abgeleitet. Gekrümmte Linien geben den Informationsfluss zur Rückprojektion an, insbesondere die Ausgabeprojektion und den Maßstab.

In Earth Engine werden Projektionen durch ein Koordinatenreferenzsystem (Coordinate Reference System, CRS oder crs-Parameter vieler Methoden) angegeben. Sie können die Projektion eines Bildes prüfen, indem Sie projection() darauf aufrufen:

Code-Editor (JavaScript)

var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(0);
print('Projection, crs, and crs_transform:', image.projection());
print('Scale in meters:', image.projection().nominalScale());

Python einrichten

Weitere Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung finden Sie auf der Seite Python-Umgebung.

import ee
import geemap.core as geemap

Colab (Python)

image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(0)
display('Projection, crs, and crs_transform:', image.projection())
display('Scale in meters:', image.projection().nominalScale())

Wenn Sie nominalScale() für das von projection() zurückgegebene ee.Projection aufrufen, können Sie die native Auflösung des Bildes ermitteln. Die native Auflösung ist der nominelle Pixelmaßstab in Metern der niedrigsten Ebene der Bildpyramide. Da jede Ebene eines Bildes einen anderen Maßstab und/oder eine andere Projektion haben kann, wird bei einem Aufruf von projection() für ein Bild mit mindestens einer Ebene, die nicht dieselbe Projektion wie die anderen hat, möglicherweise ein Fehler wie der folgende angezeigt:

Die Standardprojektion

Sofern Sie nicht möchten, dass die Berechnung in einer bestimmten Projektion erfolgt, müssen Sie in der Regel keine Projektion angeben. Nur für mehrdeutige Ausgaben müssen Sie in Earth Engine eine Projektion und/oder einen Maßstab angeben. Unklarheiten können entstehen, wenn Sie ein ImageCollection mit Bildern mit unterschiedlichen Projektionen reduzieren (d.h. ein Composite erstellen). Ein Bild, das ein zusammengesetztes Bild oder Mosaik aus Eingabebildern mit unterschiedlichen Projektionen ist, hat die Standardprojektion, nämlich WGS84 mit einem Maßstab von 1 Grad. Beispiel:

Code-Editor (JavaScript)

var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic();
print(mosaic.projection());

Python einrichten

Weitere Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung finden Sie auf der Seite Python-Umgebung.

import ee
import geemap.core as geemap

Colab (Python)

collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA')
mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic()
display(mosaic.projection())

Wenn Sie versuchen, ein solches Bild in einer Berechnung zu verwenden, wird möglicherweise ein Fehler wie der folgende angezeigt:

Im Allgemeinen ist eine Aggregation im 1-Grad-Maßstab nicht erwünscht oder beabsichtigt. Daher erinnert Earth Engine Sie daran, eine vollständige Spezifikation für die Ausgabe anzugeben.

Nutzer sind oft verwirrt, wenn sie dieses Verhalten beobachten, und machen sich Sorgen, dass die Projektionsinformationen „verloren“ gehen. Die Pixel werden jedoch erst berechnet, wenn sie benötigt werden (weitere Informationen). Zu diesem Zeitpunkt ist immer eine Ausgabeprojektion vorhanden, die angibt, wie das Composite berechnet werden soll.

In den meisten Anwendungsfällen ist es kein Problem, wenn keine Projektion vorhanden ist. Tatsächlich ist es sogar eine wertvolle Optimierung, da die Ergebnisse auf jeder Zoomstufe in der Vorschau angezeigt werden können, ohne dass die Berechnung in voller Auflösung abgeschlossen sein muss. Das bedeutet aber, dass die Ausgabe bei unterschiedlichen Zoomstufen unterschiedlich aussehen kann.

Wenn das optimierte Anzeige-Image nicht ausreicht, kann die Berechnung in einer bestimmten Projektion erzwungen werden, indem die Ausgabe wie im folgenden Abschnitt beschrieben neu projiziert wird.

Neu projizieren

Mit der Methode reproject() können Sie erzwingen, dass Vorgänge in einer bestimmten Projektion ausgeführt werden. Wenn Sie reproject() verwenden, werden die Eingaben in der Projektion angefordert, die im reproject()-Aufruf angegeben ist. Berechnungen in Ihrem Code vor dem reproject()-Aufruf werden in der angegebenen Projektion ausgeführt. So erzwingen Sie beispielsweise, dass ein Composite in einer bestimmten Projektion erstellt wird:

Code-Editor (JavaScript)

// Some projection that is suitable for your area of interest.
var proj = ee.Projection(...);
var output = collection.reduce(...).reproject(proj);

Python einrichten

Weitere Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung finden Sie auf der Seite Python-Umgebung.

import ee
import geemap.core as geemap

Colab (Python)

# Some projection that is suitable for your area of interest.
proj = ee.Projection(...)
output = collection.reduce(...).reproject(proj)

Einige Fälle, in denen eine feste Projektion erforderlich ist:

Es gibt mehrere Gründe, warum Sie reproject() nur verwenden sollten, wenn es unbedingt erforderlich ist. Angenommen, Sie projizieren etwas neu und fügen es der Karte hinzu. Wenn der Maßstab, den Sie im reproject()-Aufruf angegeben haben, viel kleiner als die Zoomstufe der Karte ist, werden alle Eingaben in Earth Engine in einem sehr kleinen Maßstab über einen sehr großen räumlichen Bereich angefordert. Dadurch kann es passieren, dass viel zu viele Daten gleichzeitig angefordert werden, was zu einem Fehler führt.

Wenn die endgültige Ausgabe in einer anderen Projektion als der in reproject() angegebenen erfolgt, führt dies zu einer weiteren Reprojektion. Das ist ein weiterer Grund, reproject() in Ihrem Code mit Vorsicht zu verwenden. Im folgenden Beispiel wird das MODIS-Bild zuerst in WGS84 und dann in Maps Mercator für die Anzeige in der Code Editor-Karte reprojiziert:

Code-Editor (JavaScript)

// The input image has a SR-ORG:6974 (sinusoidal) projection.
var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0);

// Operations *before* the reproject call will be done in the projection
// specified by reproject().  The output results in another reprojection.
var reprojected = image
    .unitScale(-2000, 10000)
    .reproject('EPSG:4326', null, 500);
Map.addLayer(reprojected, {min: 0.15, max: 0.7}, 'Reprojected');

Python einrichten

Weitere Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung finden Sie auf der Seite Python-Umgebung.

import ee
import geemap.core as geemap

Colab (Python)

# The input image has a SR-ORG:6974 (sinusoidal) projection.
image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0)

# Operations *before* the reproject call will be done in the projection
# specified by reproject(). The output results in another reprojection.
reprojected = image.unitScale(-2000, 10000).reproject('EPSG:4326', None, 500)
m = geemap.Map()
m.add_layer(reprojected, {'min': 0.15, 'max': 0.7}, 'Reprojected')
m

Abbildung 2 zeigt den Ablauf der Vorgänge für dieses einfache Beispiel für die Reprojektion. Die erste Rückprojektion ist explizit, wie im reproject()-Aufruf angegeben. Die zweite Reprojektion erfolgt implizit und wird automatisch von Earth Engine ausgeführt, um das Ergebnis auf der Karte darzustellen. Beachten Sie auch, dass die Informationen zur zu verwendenden Projektion von der Anfrage zurück an die Eingabe weitergegeben werden.

Rückprojektion
Abbildung 2. Flussdiagramm der Vorgänge, die der Reprojektion eines MODIS-Bilds in der Code Editor-Karte entsprechen. Gekrümmte Linien geben den Informationsfluss zu den Rückprojektionen an, insbesondere zur Ausgabeprojektion und ‑skalierung.