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');
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.
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());
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());
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);
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:
- Berechnung von Gradienten (z.B.
ee.Terrain.gradientoderee.Terrain.slope). reduceResolution, wenn Sie Pixel mit höherer Auflösung zu Pixeln mit niedrigerer Auflösung aggregieren möchten. (Weitere Informationen zum Reduzieren der Auflösung).
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');
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.