Proyeksi

Earth Engine didesain agar Anda jarang perlu khawatir tentang proyeksi peta saat melakukan penghitungan. Seperti skala, proyeksi tempat penghitungan dilakukan ditentukan berdasarkan basis "tarik". Secara khusus, input diminta dalam proyeksi output. Output dapat ditentukan dari parameter fungsi (misalnya, crs), objek peta Code Editor dan geemap (yang memiliki proyeksi peta mercator (EPSG:3857)), atau dengan panggilan reproject(). Saat Anda menampilkan gambar di Code Editor atau geemap, input akan diminta di peta 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 Diagram 1. Perhatikan bahwa proyeksi input ditentukan oleh output, khususnya proyeksi peta mercator dari tampilan peta di Code Editor. Proyeksi ini menyebar kembali melalui urutan operasi sehingga input diminta di peta mercator, pada skala yang ditentukan oleh tingkat zoom peta.

proyeksi
Diagram 1. Diagram alur operasi yang sesuai dengan tampilan gambar MODIS di peta Code Editor. Proyeksi (sisi kiri diagram alur) dari setiap operasi ditentukan dari output. Garis lengkung menunjukkan alur informasi ke proyeksi ulang: 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 dari 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 akan melihat error seperti:

Proyeksi default

Kecuali jika Anda memerlukan penghitungan terjadi dalam proyeksi tertentu, umumnya tidak perlu menentukan proyeksi. Hanya untuk output yang ambigu, Earth Engine akan meminta Anda menentukan proyeksi dan/atau skala. Ambiguitas dapat terjadi karena 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. Jika proyeksi default ini tidak sesuai untuk analisis Anda (misalnya, terlalu kasar, atau Anda perlu mencegah artefak pengambilan sampel ulang dalam penghitungan hilir seperti analisis medan), Anda dapat menetapkan default yang berbeda menggunakan image.setDefaultProjection(crs). Hal ini memastikan bahwa jika Earth Engine perlu memilih proyeksi untuk penghitungan yang melibatkan gambar, proyeksi yang akan digunakan adalah proyeksi yang ditentukan, bukan WGS84 pada 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 penghitungan, Anda mungkin akan melihat error seperti:

Umumnya, agregasi pada skala 1 derajat tidak diinginkan atau dimaksudkan, sehingga Earth Engine memberikan pengingat yang mudah dipahami ini untuk memberikan spesifikasi lengkap untuk output.

Pengguna sering kali merasa bingung dengan perilaku ini dan khawatir tentang 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 memiliki proyeksi bukanlah masalah dan sebenarnya merupakan pengoptimalan yang berharga, karena memungkinkan pratinjau hasil pada tingkat zoom apa pun tanpa harus menunggu penghitungan resolusi penuh selesai. Namun, hal ini berarti output dapat terlihat berbeda pada tingkat zoom yang berbeda.

Jika gambar tampilan yang dioptimalkan entah bagaimana tidak cukup, penghitungan dalam proyeksi tertentu dapat dipaksakan dengan memproyeksikan ulang output seperti yang dijelaskan di bagian berikut.

Memproyeksikan ulang

Anda dapat memaksa operasi untuk dilakukan dalam proyeksi tertentu dengan metode reproject(). Penggunaan reproject() akan menyebabkan input diminta dalam proyeksi yang ditentukan dalam panggilan reproject(). Penghitungan dalam kode Anda sebelum panggilan reproject() akan dilakukan dalam proyeksi yang ditentukan. Misalnya, untuk memaksa komposit diproduksi dalam a 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 mencakup:

  • Menghitung gradien (misalnya, ee.Terrain.gradient atau ee.Terrain.slope).
  • reduceResolution, untuk saat Anda ingin menggabungkan piksel resolusi yang lebih tinggi ke resolusi yang lebih rendah. (Pelajari lebih lanjut cara mengurangi resolusi).

Fungsi dalam paket ee.Terrain (misalnya, slope, aspect, hillshade) menghitung nilai berdasarkan piksel tetangga dan sensitif terhadap artefak pengambilan sampel ulang yang diperkenalkan selama proyeksi ulang. Jika proyeksi penghitungan berbeda dengan proyeksi asli DEM, pengambilan sampel ulang tetangga terdekat default dapat membuat pola buatan dalam output. Untuk hasil terbaik, lakukan analisis medan dalam proyeksi asli DEM. Jika menggunakan ImageCollection ubin DEM, buat mosaik dan gunakan setDefaultProjection() dengan proyeksi asli koleksi untuk memastikan analisis berjalan di petak yang benar, seperti yang dijelaskan di bagian Proyeksi default.

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 atas rentang spasial yang sangat luas. Hal ini dapat menyebabkan terlalu banyak data yang diminta sekaligus dan menyebabkan error.

Jika output akhir berada dalam proyeksi yang berbeda dari yang ditentukan dalam the reproject() panggilan, hal tersebut akan menghasilkan proyeksi ulang lain. Ini adalah alasan lain untuk berhati-hati dalam menggunakan reproject() dalam kode Anda. Pertimbangkan contoh berikut, yang memaksa gambar MODIS untuk diproyeksikan ulang terlebih dahulu ke WGS84, lalu diproyeksikan ulang ke peta 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

Diagram 2 menggambarkan alur operasi yang sesuai dengan contoh proyeksi ulang sederhana ini. Perhatikan bahwa proyeksi ulang pertama bersifat eksplisit, seperti yang ditentukan dalam reproject() panggilan. Proyeksi ulang kedua bersifat implisit, yang dilakukan oleh Earth Engine secara otomatis untuk menampilkan hasil di peta. Perhatikan juga bahwa informasi tentang proyeksi yang akan digunakan menyebar kembali dari permintaan ke input.

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