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 stattfinden, auf Pull-Basis bestimmt. Konkret werden Eingaben in der Ausgabe projektion angefordert. Die Ausgabe kann aus einem Funktionsparameter (z.B. crs), Code-Editor- und geemap-Kartenobjekten (die eine Mercator-Projektion (EPSG:3857) haben) oder mit einem reproject() Aufruf bestimmt werden. Wenn Sie Bilder im Code-Editor oder in geemap anzeigen, werden Eingaben in 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. Beachten Sie , dass die Projektion der Eingabe durch die Ausgabe bestimmt wird, insbesondere durch die Mercator-Projektion der Kartenanzeige im Code-Editor. Diese Projektion wird durch die Abfolge der Vorgänge weitergegeben, sodass die Eingaben in Mercator in 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 in der Code-Editor-Karte entsprechen. Die Projektionen (linke Seite des Flussdiagramms) der einzelnen Vorgänge werden aus der Ausgabe bestimmt. Gekrümmte Linien zeigen den Informationsfluss zur Reprojektion an, insbesondere die Ausgabeprojektion und den Maßstab.

In Earth Engine werden Projektionen durch ein Koordinatenreferenzsystem (Coordinate Reference System, CRS oder der crs Parameter vieler Methoden) angegeben. Sie können die Projektion eines Bilds prüfen, indem Sie projection() 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 Bilds bestimmen. Die native Auflösung ist der nominale Pixelmaßstab in Metern der niedrigsten Ebene der Bildpyramide. Da jedes Band eines Bilds einen anderen Maßstab und/oder eine andere Projektion haben kann, wird möglicherweise ein Fehler wie der folgende angezeigt, wenn Sie projection() für ein Bild mit mindestens einem Band aufrufen, das nicht dieselbe Projektion wie die anderen hat:

Die Standardprojektion

Sofern Ihre Berechnung nicht in einer bestimmten Projektion erfolgen muss, ist es in der Regel nicht erforderlich, eine Projektion anzugeben. Nur bei mehrdeutigen Ausgaben müssen Sie in Earth Engine eine Projektion und/oder einen Maßstab angeben. Mehrdeutigkeit kann entstehen, wenn Sie ein ImageCollection reduzieren, das Bilder mit unterschiedlichen Projektionen enthält (d.h. ein zusammengesetztes Bild erstellen). Ein Bild, das ein zusammengesetztes Bild oder ein Mosaik aus Eingabebildern mit unterschiedlichen Projektionen ist, hat die Standard projektion, die WGS84 mit einem Maßstab von 1 Grad ist. Wenn diese Standardprojektion für Ihre Analyse nicht geeignet ist (z.B. zu grob ist oder Sie Resampling-Artefakte bei nachfolgenden Berechnungen wie der Geländeanalyse vermeiden möchten), können Sie mit image.setDefaultProjection(crs) eine andere Standardprojektion festlegen. So wird sichergestellt, dass Earth Engine bei der Auswahl einer Projektion für eine Berechnung mit dem Bild die angegebene Projektion und nicht WGS84 mit einem Maßstab von 1 Grad verwendet. 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 Maßstab von 1 Grad nicht erwünscht oder beabsichtigt. Daher erinnert Earth Engine Sie daran, eine vollständige Spezifikation für die Ausgabe anzugeben.

Nutzer finden dieses Verhalten oft verwirrend und machen sich Sorgen um die "verlorenen" Projektionsinformationen. Die Pixel werden jedoch erst berechnet, wenn sie benötigt werden (weitere Informationen). Zu diesem Zeitpunkt ist immer eine Ausgabeprojektion vorhanden, die in der Anfrage angegeben wurde, in der die Berechnung des zusammengesetzten Bilds festgelegt wurde.

In den meisten Anwendungsfällen ist das Fehlen einer Projektion kein Problem und stellt sogar eine wertvolle Optimierung dar, da Sie die Ergebnisse in jeder Zoomstufe in der Vorschau ansehen können, ohne warten zu müssen, bis die Berechnung mit voller Auflösung abgeschlossen ist. Das bedeutet jedoch, dass die Ausgabe bei unterschiedlichen Zoomstufen unterschiedlich aussehen kann.

Wenn das optimierte Anzeigebild nicht ausreicht, kann die Berechnung in einer bestimmten Projektion erzwungen werden, indem Sie die Ausgabe wie im folgenden Abschnitt beschrieben reprojizieren.

Reprojektion

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 ausgeführt in der angegebenen Projektion. So erzwingen Sie beispielsweise, dass ein zusammengesetztes Bild 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:

Funktionen im Paket ee.Terrain (z.B. slope, aspect, hillshade) berechnen Werte auf der Grundlage benachbarter Pixel und reagieren empfindlich auf Resampling-Artefakte, die bei der Reprojektion entstehen. Wenn sich die Projektion der Berechnung von der nativen Projektion des DEM unterscheidet, können durch das standardmäßige Resampling mit der Methode „Nächster Nachbar“ künstliche Muster in der Ausgabe entstehen. Die besten Ergebnisse erzielen Sie, wenn Sie die Geländeanalyse in der nativen Projektion des DEM durchführen. Wenn Sie mit einer ImageCollection von DEM-Kacheln arbeiten, erstellen Sie ein Mosaik und verwenden Sie setDefaultProjection() mit der nativen Projektion der Collection, um sicherzustellen, dass die Analyse im richtigen Raster ausgeführt wird, wie im Abschnitt Standardprojektion beschrieben.

Es gibt mehrere Gründe, warum Sie reproject() nur verwenden sollten, wenn es unbedingt erforderlich ist. Angenommen, Sie reprojizieren etwas 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, fordert Earth Engine alle Eingaben in einem sehr kleinen Maßstab über einen sehr großen räumlichen Bereich an. Dies kann dazu führen, dass viel zu viele Daten gleichzeitig angefordert werden, und zu einem Fehler führen.

Wenn die endgültige Ausgabe eine andere Projektion hat als die im reproject() Aufruf angegebene, führt dies zu einer weiteren Reprojektion. Auch deshalb sollten Sie mit Vorsicht reproject() in Ihrem Code verwenden. Betrachten Sie das folgende Beispiel, in dem das MODIS-Bild zuerst in WGS84 und dann in Mercator reprojiziert wird, um es in der Code-Editor-Karte anzuzeigen:

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 zur Reprojektion. Die erste Reprojektion ist explizit, wie im reproject() Aufruf angegeben. Die zweite Reprojektion ist implizit und wird automatisch von Earth Engine ausgeführt, um das Ergebnis auf der Karte anzuzeigen. Beachten Sie auch, dass die Informationen zur zu verwendenden Projektion von der Anfrage 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 zeigen den Informationsfluss zu den Reprojektionen an, insbesondere die Ausgabeprojektion und den Maßstab.