Proyeksi

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

Penyiapan Python

Baca halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

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.

proyeksi
Gambar 1. Diagram alur operasi yang sesuai dengan tampilan gambar MODIS di peta Code Editor. Proyeksi (sisi kiri diagram alur) setiap operasi ditentukan dari output. Garis melengkung menunjukkan alur informasi ke reproyeksi: khususnya, proyeksi dan skala output.

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

Penyiapan Python

Baca halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

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

Penyiapan Python

Baca halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

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

Penyiapan Python

Baca halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

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:

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

Penyiapan Python

Baca halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

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.

reproyeksi
Gambar 2. Diagram alur operasi yang sesuai dengan reproyeksi gambar MODIS di peta Code Editor. Garis melengkung menunjukkan alur informasi ke reproyeksi: khususnya, proyeksi dan skala output.