Tahminler

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');

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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.

projeksiyon
Şekil 1. Kod Düzenleyici haritasında MODIS görüntüsünün görüntülenmesine karşılık gelen işlemlerin akış şeması. Her işlemin projeksiyonları (akış şemasının sol tarafı) çıkıştan belirlenir. Eğimli çizgiler, yeniden projeksiyona (özellikle çıkış projeksiyonu ve ölçeği) yönelik bilgi akışını gösterir.

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());

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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());

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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);

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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:

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');

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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

yeniden projeksiyon
Şekil 2. Kod Düzenleyici haritasında bir MODIS görüntüsünün yeniden projelendirilmesine karşılık gelen işlemlerin akış şeması. Eğimli çizgiler, yeniden projeksiyonlara (özellikle çıkış projeksiyonu ve ölçeği) yönelik bilgi akışını gösterir.