Earth Engine ist so konzipiert, dass Sie sich bei Berechnungen selten Gedanken über Kartenprojektionen machen müssen. Wie beim Maßstab wird die Projektion, in der die Berechnungen erfolgen, auf „Pull“-Basis bestimmt. Insbesondere werden Eingaben in der Ausgabeprojektion angefordert. Die Ausgabe kann über einen Funktionsparameter (z.B. crs
), über Code-Editor- und geemap-Kartenobjekte (mit der Projektion maps mercator (EPSG:3857)) oder über einen reproject()
-Aufruf ermittelt werden. Wenn Sie Bilder im Code-Editor oder in geemap anzeigen, werden Eingaben in Maps Mercator angefordert. Betrachten Sie die folgende einfache Operation an einem MODIS-Bild mit einer sinusförmigen Projektion:
// 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');
import ee import geemap.core as geemap
# 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 Abfolge 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ückgeändert, sodass die Eingaben in Mercator-Karten in einem Maßstab angefordert werden, der von der Zoomstufe der Karte abhängt.

In Earth Engine werden Projektionen durch ein Koordinatenreferenzsystem (CRS oder den crs
-Parameter vieler Methoden) angegeben. Sie können die Projektion eines Bildes prüfen, indem Sie projection()
darauf aufrufen:
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());
import ee import geemap.core as geemap
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 du nominalScale()
auf das von projection()
zurückgegebene ee.Projection
aufrufst, kannst du die native Auflösung des Bildes ermitteln. Die native Auflösung ist die nominelle Pixelskala in Metern der untersten Ebene der Bildpyramide. Da jeder Band eines Bildes einen anderen Maßstab und/oder eine andere Projektion haben kann, wird bei der Ausführung von projection()
für ein Bild mit mindestens einem Band, das nicht dieselbe Projektion wie die anderen hat, möglicherweise ein Fehler wie der folgende ausgegeben:
Die Standardprojektion
Sofern die Berechnung nicht in einer bestimmten Projektion erfolgen muss, ist es im Allgemeinen nicht erforderlich, eine Projektion anzugeben. Nur bei mehrdeutiger Ausgabe müssen Sie in Earth Engine eine Projektion und/oder einen Maßstab angeben. Mehrdeutigkeit kann durch das Reduzieren eines ImageCollection
mit Bildern mit unterschiedlichen Projektionen entstehen (Kompositbild erstellen). Ein Bild, das ein Komposit oder Mosaik aus Eingabebildern mit unterschiedlichen Projektionen ist, hat die Standardprojektion WGS84 mit einem Maßstab von 1 Grad.
Beispiel:
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); var mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic(); print(mosaic.projection());
import ee import geemap.core as geemap
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 eine Fehlermeldung wie die folgende angezeigt:
Im Allgemeinen ist eine Aggregation im Maßstab 1 Grad nicht erwünscht oder beabsichtigt. Daher werden Sie in Earth Engine daran erinnert, 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 dann berechnet, wenn sie benötigt werden (weitere Informationen). Zu diesem Zeitpunkt ist immer eine Ausgabeprojektion mit der Anfrage verknüpft, in der angegeben ist, wie die Zusammensetzung berechnet werden soll.
In den allermeisten Anwendungsfällen ist die fehlende Projektion kein Problem und sogar eine wertvolle Optimierung, da eine Vorschau der Ergebnisse auf jeder Zoomebene möglich ist, ohne dass die Berechnung in voller Auflösung abgeschlossen werden muss. Das bedeutet aber, 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 die Ausgabe wie im folgenden Abschnitt beschrieben neu projiziert wird.
Neuprojektion
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:
// Some projection that is suitable for your area of interest. var proj = ee.Projection(...); var output = collection.reduce(...).reproject(proj);
import ee import geemap.core as geemap
# Some projection that is suitable for your area of interest. proj = ee.Projection(...) output = collection.reduce(...).reproject(proj)
Beispiele für Fälle, in denen eine feste Projektion erforderlich ist:
- Gradienten berechnen (z. B.
ee.Terrain.gradient
oderee.Terrain.slope
) reduceResolution
, wenn Sie Pixel mit höherer Auflösung zu einer niedrigeren Auflösung zusammenfassen möchten. Weitere Informationen zum Verringern der Auflösung
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 im reproject()
-Aufruf angegebene Maßstab viel kleiner als die Zoomstufe der Karte ist, fordert Earth Engine alle Eingaben in sehr kleinem Maßstab über einen sehr großen räumlichen Bereich an. Das kann dazu führen, dass zu viele Daten gleichzeitig angefordert werden und ein Fehler auftritt.
Wenn die endgültige Ausgabe in einer anderen Projektion als der im reproject()
-Aufruf angegebenen Projektion vorliegt, führt dies zu einer weiteren Projektion. Dies ist ein weiterer Grund, warum Sie reproject()
in Ihrem Code mit Vorsicht verwenden sollten. Im folgenden Beispiel wird das MODIS-Bild zuerst in WGS84 und dann in Mercator-Karten neu projiziert, um es in der Code-Editor-Karte anzuzeigen:
// 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');
import ee import geemap.core as geemap
# 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, die diesem einfachen Beispiel für die Neuprojektion entsprechen. Die erste Reprojektion ist explizit, wie im reproject()
-Aufruf angegeben. Die zweite Projektion ist implizit und wird automatisch von Earth Engine durchgeführt, um das Ergebnis auf der Karte anzuzeigen. Beachten Sie auch, dass die Informationen zur zu verwendenden Projektion von der Anfrage zurück an die Eingabe weitergegeben werden.
