Earth Engine, hesaplama yaparken harita projeksiyonları hakkında nadiren endişelenmenizi sağlayacak şekilde tasarlanmıştır. Ölçekte olduğu gibi, hesaplamaların yapıldığı projeksiyon da "çekme" temelli olarak belirlenir. Daha açık belirtmek gerekirse, girişler çıkış tahmininde istenir. Çıkış, bir işlev parametresinden (ör. crs
), Code Editor ve geemap harita nesnelerinden (maps mercator (EPSG:3857) projeksiyonuna sahip) veya reproject()
çağrısıyla belirlenebilir. Kod Düzenleyici'de veya geemap'te resim görüntülediğinizde girişler harita mercator biçiminde istenir. Sinüsoidal projeksiyonu olan bir MODIS görüntüsünde aşağıdaki basit işlemi düşünün:
// 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
Bu kod örneğindeki işlemlerin sırası Şekil 1'de şematik olarak gösterilmiştir. Giriş projeksiyonunun çıkışa, özellikle de Kod Düzenleyici'deki harita görüntülemenin harita Mercator projeksiyonuna göre belirlendiğini unutmayın. Bu projeksiyon, işlem sırası boyunca geriye doğru yayılır. Böylece, girişler haritanın yakınlaştırma düzeyine göre belirlenen bir ölçekte, haritalar Mercator'da istenir.

Earth Engine'da projeksiyonlar, bir Koordinat Referans Sistemi (CRS veya birçok yöntemin crs
parametresi) ile belirtilir. Bir resmin projeksiyonunu kontrol etmek için projection()
işlevini çağırabilirsiniz:
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())
projection()
tarafından döndürülen ee.Projection
üzerinde nominalScale()
'ü çağırarak resmin doğal çözünürlüğünü belirleyebileceğinizi unutmayın. Doğal çözünürlük, resim piramidinin en alt seviyesinin metre cinsinden nominal piksel ölçeğidir. Bir görüntünün her bandının farklı bir ölçeği ve/veya projeksiyonu olabileceğinden, diğerleriyle aynı projeksiyona sahip olmayan en az bir bandı olan bir görüntüde projection()
'ü çağırırsanız aşağıdaki gibi bir hata görebilirsiniz:
Varsayılan projeksiyon
Hesabınızın belirli bir projeksiyonda yapılmasına ihtiyacınız yoksa genellikle projeksiyon belirtmeniz gerekmez. Earth Engine, yalnızca belirsiz olan çıkışlar için projeksiyon ve/veya ölçek belirtmenizi gerektirir. Belirsizlik, farklı projeksiyonlara sahip resimler içeren bir ImageCollection
'ün azaltılmasından (ör. bir kompozit oluşturma) kaynaklanabilir. Farklı projeksiyonlara sahip giriş resimlerinin bir birleşimi veya mozaiğinin yer aldığı resimler, 1 derecelik ölçeğe sahip varsayılan projeksiyona (WGS84) sahiptir.
Örneğin:
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())
Hesaplamada bu tür bir resim kullanmaya çalışırsanız aşağıdaki gibi bir hata görebilirsiniz:
Genellikle 1 derece ölçekte bir toplama istenmez veya amaçlanmaz. Bu nedenle Earth Engine, çıkış için eksiksiz bir özellik belirtmenizi hatırlatır.
Kullanıcılar genellikle bu davranışı kafa karıştırıcı bulur ve "kaybedilen" projeksiyon bilgileri konusunda endişelenir. Ancak pikseller, ihtiyaç duyulana kadar gerçekten hesaplanmaz (daha fazla bilgi). Bu noktada, birleşik resmin nasıl hesaplanacağını belirten bir çıkış projeksiyonu her zaman istekle birlikte gönderilir.
Projeksiyon olmaması, kullanım alanlarının büyük çoğunluğunda sorun teşkil etmez ve tam çözünürlüklü hesaplamanın tamamlanmasını beklemek zorunda kalmadan sonuçları herhangi bir yakınlaştırma düzeyinde önizleme olanağı sunduğundan aslında değerli bir optimizasyondur. Ancak çıkışın farklı yakınlaştırma düzeylerinde farklı görünebileceği anlamına gelir.
Optimize edilmiş görüntü yeterli değilse çıkışı aşağıdaki bölümde açıklandığı gibi yeniden projelendirerek belirli bir projeksiyonda hesaplama yapılabilir.
Yeniden projelendirme
reproject()
yöntemini kullanarak işlemlerin belirli bir projeksiyonda yapılmasını zorunlu tutabilirsiniz. reproject()
kullanılması, girişlerin reproject()
çağrısında belirtilen projeksiyonda istenmesine neden olur.
reproject()
çağrısından önce kodunuzdaki hesaplamalar belirtilen projeksiyonda yapılır. Örneğin, bir kompozitin belirli bir projeksiyonda üretilmesini zorunlu kılmak için:
// 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)
Sabit projeksiyon gerektiren bazı durumlar şunlardır:
- Gradyan hesaplama (ör.
ee.Terrain.gradient
veyaee.Terrain.slope
). reduceResolution
, daha yüksek çözünürlüklü pikselleri daha düşük çözünürlükte toplamak istediğinizde (Çözünürlüğü düşürme hakkında daha fazla bilgi edinin.)
Gerekmediği sürece reproject()
kullanmaktan kaçınmanız için birkaç neden vardır. Örneğin, bir öğeyi yeniden projelendirip haritaya eklediğinizi varsayalım. reproject()
çağrısında belirttiğiniz ölçek, haritanın yakınlaştırma düzeyinden çok daha küçükse Earth Engine tüm girişleri çok geniş bir alan kapsamı içinde çok küçük ölçekte ister. Bu durum, aynı anda çok fazla veri istenmesine ve hataya yol açabilir.
Nihai çıkış, reproject()
çağrısında belirtilenden farklı bir projeksiyondaysa başka bir yeniden projeksiyon yapılır. Bu, kodunuzda reproject()
kullanma konusunda dikkatli olmanız için başka bir nedendir. MODIS görüntüsünün önce WGS84, ardından Kod Düzenleyici haritasında görüntülenmesi için maps mercator projeksiyon sistemine yeniden projelendirilmesini zorunlu kılan aşağıdaki örneği inceleyin:
// 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
Şekil 2'de, bu basit yeniden projeksiyon örneğine karşılık gelen işlem akışı şematik olarak gösterilmektedir. İlk yeniden projeksiyonun, reproject()
çağrısında belirtildiği gibi açık olduğunu unutmayın. İkinci yeniden projeksiyon, sonucu haritada göstermek için Earth Engine tarafından otomatik olarak yapılan implicit bir işlemdir. Ayrıca, hangi projeksiyonun kullanılacağıyla ilgili bilgilerin istek
