Earth Engine, hesaplama yaparken harita projeksiyonları konusunda nadiren endişelenmenizi gerektirecek şekilde tasarlanmıştır. Ölçekte olduğu gibi, hesaplamaların yapıldığı projeksiyon da "çekme" esasına göre belirlenir. Daha net bir ifadeyle, çıkış projeksiyonunda girişler istenir. Çıkış, bir işlev parametresinden (ör. crs), Kod Düzenleyici ve geemap harita nesnelerinden (maps
mercator (EPSG:3857) projeksiyonuna sahip) veya bir reproject() çağrısıyla belirlenebilir. Kod düzenleyicide veya geemap'te görüntüleri gösterdiğinizde, girişler maps mercator'da istenir. Sinüsoidal projeksiyonu olan bir MODIS görüntüsünde aşağıdaki işlemi yaptığınızı düşünün:
Kod Düzenleyici (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
Bu kod örneğindeki işlem sırası Şekil 1'de şematik olarak gösterilmiştir. Girişin projeksiyonunun çıkış tarafından, özellikle de maps mercator projeksiyonu tarafından belirlendiğini unutmayın. Bu projeksiyon, kod düzenleyicideki harita ekranının projeksiyonudur. Bu projeksiyon, işlemler dizisinde geriye doğru yayılır. Böylece girişler, haritanın yakınlaştırma seviyesine göre belirlenen bir ölçekte Mercator haritalarında istenir.
Earth Engine'de projeksiyonlar, bir Koordinat Referans Sistemi (CRS veya birçok yöntemin crs parametresi) ile belirtilir. Bir resmin projeksiyonunu projection() işlevini çağırarak kontrol edebilirsiniz:
Kod Düzenleyici (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())
nominalScale() işlevini projection() tarafından döndürülen ee.Projection üzerinde çağırarak resmin doğal çözünürlüğünü belirleyebileceğinizi unutmayın. Doğal çözünürlük, görüntü piramidinin en düşük seviyesinin metre cinsinden nominal piksel ölçeğidir. Bir görüntünün her bandı farklı bir ölçeğe ve/veya projeksiyona sahip olabileceğinden, diğerleriyle aynı projeksiyona sahip olmayan en az bir bant içeren bir görüntüde projection() işlevini çağırırsanız şu gibi bir hata görebilirsiniz:
Varsayılan projeksiyon
Hesaplamanızın belirli bir projeksiyonda yapılması gerekmiyorsa genellikle projeksiyon belirtmenize gerek yoktur. Yalnızca belirsiz çıktılar için Earth Engine, bir projeksiyon ve/veya ölçek belirtmenizi gerektirir. Farklı projeksiyonlara sahip resimler içeren bir ImageCollection öğesinin küçültülmesi
(ör. birleşik oluşturma) belirsizliğe neden olabilir. Farklı projeksiyonlara sahip giriş resimlerinin birleşimi veya mozaiği olan bir resim, varsayılan projeksiyona (1 derece ölçekli WGS84) sahip olur.
Örneğin:
Kod Düzenleyici (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())
Bu tür bir resmi hesaplamada kullanmaya çalışırsanız şu gibi bir hata mesajı görebilirsiniz:
Genellikle 1 derecelik ölçekte toplama işlemi istenmez veya amaçlanmaz. Bu nedenle Earth Engine, çıkış için eksiksiz bir spesifikasyon sağlamanız konusunda sizi nazikçe uyarır.
Kullanıcılar genellikle bu davranışı kafa karıştırıcı bulur ve "kaybolan" projeksiyon bilgileri hakkında endişelenir. Ancak pikseller, ihtiyaç duyulana kadar hesaplanmaz (daha fazla bilgi). Bu noktada, bileşenin nasıl hesaplanacağını belirten isteğe her zaman bir çıkış projeksiyonu eşlik eder.
Kullanım alanlarının büyük çoğunluğunda, projeksiyon olmaması sorun teşkil etmez ve aslında değerli bir optimizasyondur. Çünkü sonuçların tam çözünürlük hesaplamasının tamamlanmasını beklemeden herhangi bir yakınlaştırma seviyesinde önizlenmesine olanak tanır. Ancak bu, çıktının farklı yakınlaştırma düzeylerinde farklı görünebileceği anlamına gelir.
Optimize edilmiş ekran resmi bir şekilde yeterli değilse çıkışı aşağıdaki bölümde açıklandığı gibi yeniden yansıtarak belirli bir projeksiyonda hesaplama zorlanabilir.
Yeniden projeksiyon
reproject() yöntemiyle işlemlerin belirli bir projeksiyonda yapılmasını zorlayabilirsiniz. reproject() kullanıldığında, reproject() çağrısında belirtilen projeksiyonda girişler istenir.
reproject() çağrısından önceki kodunuzdaki hesaplamalar belirtilen projeksiyonda yapılır. Örneğin, bir bileşimin belirli bir projeksiyonda oluşturulmasını zorlamak için:
Kod Düzenleyici (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)
Sabit projeksiyon gerektiren birkaç durum şunlardır:
- Renk geçişlerini hesaplama (ör.
ee.Terrain.gradientveyaee.Terrain.slope). reduceResolution, daha yüksek çözünürlüklü pikselleri daha düşük çözünürlüklü piksellerde toplamak istediğinizde kullanılır. (Çözünürlüğü düşürme hakkında daha fazla bilgi edinin).
Kesinlikle ihtiyacınız olmadığı sürece reproject() kullanmaktan kaçınmanızın birkaç nedeni vardır. Örneğin, bir şeyi yeniden yansıttığınızı ve haritaya eklediğinizi varsayalım. reproject() çağrısında belirttiğiniz ölçek, haritanın yakınlaştırma seviyesinden çok daha küçükse Earth Engine, tüm girişleri çok geniş bir mekansal kapsamda çok küçük bir ölçekte ister. Bu durum, aynı anda çok fazla veri istenmesine ve hataya yol açabilir.
Nihai çıktı, reproject() çağrısında belirtilenden farklı bir projeksiyondaysa bu durum başka bir yeniden projeksiyonla sonuçlanır. Bu, kodunuzda reproject() kullanırken dikkatli olmanız için başka bir nedendir. Aşağıdaki örneği inceleyin. Bu örnek, MODIS görüntüsünün önce WGS84'e, ardından Kod Düzenleyici haritasında gösterilmek üzere maps mercator'a yeniden yansıtılmasını zorunlu kılar:
Kod Düzenleyici (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
Şekil 2'de, bu basit yeniden projeksiyon örneğine karşılık gelen işlemlerin 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 gerçekleştirilen örtülü bir işlemdir. Ayrıca, hangi projeksiyonun kullanılacağıyla ilgili bilgilerin istekten girişe geri yayıldığını da unutmayın.