Earth Engine didesain agar Anda jarang perlu mengkhawatirkan proyeksi peta saat
melakukan komputasi. Seperti halnya penskalaan, proyeksi tempat komputasi dilakukan ditentukan berdasarkan "tarikan". Secara khusus, input diminta dalam proyeksi
output. Output dapat ditentukan dari parameter fungsi (mis. crs),
Objek peta Code Editor dan geemap (yang memiliki proyeksi maps
mercator (EPSG:3857)), atau dengan panggilan reproject(). Saat Anda
menampilkan gambar di Code Editor atau geemap, input diminta dalam
maps mercator. Pertimbangkan
operasi berikut pada gambar MODIS, yang memiliki proyeksi sinusoidal:
Editor Kode (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
Urutan operasi untuk contoh kode ini digambarkan dalam Gambar 1. Perhatikan bahwa proyeksi input ditentukan oleh output, khususnya proyeksi maps mercator dari tampilan peta di Editor Kode. Proyeksi ini dipropagasi kembali melalui urutan operasi sehingga input diminta dalam mercator peta, pada skala yang ditentukan oleh tingkat zoom peta.
Di Earth Engine, proyeksi ditentukan oleh Sistem Referensi Koordinat (CRS atau
parameter crs dari banyak metode). Anda dapat memeriksa proyeksi
gambar dengan memanggil projection() di gambar tersebut:
Editor Kode (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())
Perhatikan bahwa dengan memanggil nominalScale() pada ee.Projection yang ditampilkan
oleh projection(), Anda dapat menentukan resolusi asli gambar. Resolusi
asli adalah skala piksel nominal dalam meter pada tingkat terendah
piramida gambar. Karena setiap band gambar dapat memiliki
skala dan/atau proyeksi yang berbeda, jika Anda memanggil projection() pada gambar
dengan setidaknya satu band yang tidak memiliki proyeksi yang sama dengan yang lain, Anda mungkin melihat
error seperti:
Proyeksi default
Kecuali jika Anda memerlukan komputasi terjadi dalam proyeksi tertentu, umumnya tidak perlu menentukan proyeksi. Hanya untuk output yang ambigu, Earth Engine akan mengharuskan Anda menentukan proyeksi dan/atau skala. Ambiguitas dapat terjadi akibat
mengurangi ImageCollection yang berisi gambar dengan proyeksi yang berbeda
(yaitu membuat komposit). Gambar yang merupakan
komposit atau mosaik gambar input dengan proyeksi yang berbeda akan memiliki proyeksi
default, yaitu WGS84 dengan skala 1 derajat.
Contoh:
Editor Kode (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())
Jika Anda mencoba menggunakan gambar seperti ini dalam komputasi, Anda mungkin melihat error seperti:
Umumnya, agregasi pada skala 1 derajat tidak diinginkan atau dimaksudkan, jadi Earth Engine memberikan pengingat ini untuk memberikan spesifikasi lengkap untuk output.
Pengguna sering kali merasa bingung dengan perilaku ini dan mengkhawatirkan informasi proyeksi yang "hilang", tetapi piksel sebenarnya tidak dihitung hingga diperlukan (pelajari lebih lanjut), dan pada saat itu, selalu ada proyeksi output yang menyertai permintaan yang menentukan cara menghitung komposit.
Dalam sebagian besar kasus penggunaan, tidak adanya proyeksi bukanlah masalah dan sebenarnya merupakan pengoptimalan yang berharga, karena memungkinkan pratinjau hasil pada tingkat zoom apa pun tanpa harus menunggu hingga komputasi resolusi penuh selesai. Namun, output dapat terlihat berbeda pada tingkat zoom yang berbeda.
Jika gambar tampilan yang dioptimalkan entah bagaimana tidak cukup, komputasi dalam proyeksi tertentu dapat dipaksakan dengan memproyeksikan ulang output seperti yang dijelaskan di bagian berikut.
Memproyeksikan ulang
Anda dapat memaksa operasi dilakukan dalam proyeksi tertentu dengan metode
reproject(). Menggunakan reproject() akan menghasilkan input
yang diminta dalam proyeksi yang ditentukan dalam panggilan reproject().
Komputasi dalam kode Anda sebelum panggilan reproject() akan dilakukan
dalam proyeksi yang ditentukan. Misalnya, untuk memaksa komposit diproduksi dalam proyeksi tertentu:
Editor Kode (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)
Beberapa kasus yang memerlukan proyeksi tetap meliputi:
- Menghitung gradien (misalnya,
ee.Terrain.gradientatauee.Terrain.slope). reduceResolution, saat Anda ingin menggabungkan piksel resolusi lebih tinggi ke resolusi lebih rendah. (Pelajari lebih lanjut cara mengurangi resolusi).
Ada beberapa alasan mengapa Anda harus menghindari penggunaan reproject() kecuali jika Anda benar-benar memerlukannya. Misalnya, Anda memproyeksikan ulang sesuatu dan menambahkannya ke
peta. Jika skala yang Anda tentukan dalam panggilan reproject() jauh lebih kecil
daripada tingkat zoom peta, Earth Engine akan meminta semua input pada skala yang sangat kecil, di seluruh rentang spasial yang sangat luas. Hal ini dapat mengakibatkan terlalu banyak data yang
diminta sekaligus dan menyebabkan error.
Jika output akhir berada dalam proyeksi yang berbeda dari yang ditentukan dalam panggilan
reproject(), hal itu akan menghasilkan reproyeksi lain. Hal ini
adalah alasan lain untuk berhati-hati dalam menggunakan reproject() dalam kode Anda. Pertimbangkan
contoh berikut, yang memaksa gambar MODIS diproyeksikan ulang terlebih dahulu ke
WGS84, lalu diproyeksikan ulang ke
maps mercator untuk ditampilkan di peta Code Editor:
Editor Kode (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
Gambar 2 menggambarkan alur operasi yang sesuai dengan contoh reproyeksi sederhana ini. Perhatikan bahwa reproyeksi pertama bersifat eksplisit, seperti yang ditentukan dalam
panggilan reproject(). Proyeksi ulang kedua bersifat implisit, dilakukan oleh
Earth Engine secara otomatis untuk menampilkan hasil di peta. Perhatikan juga bahwa
informasi tentang proyeksi yang akan digunakan disebarkan kembali dari permintaan ke input.