Mengoptimumkan Masa Pelaksanaan Skrip Enjin Google Earth
Google Earth Engine (GEE) ialah platform yang berkuasa untuk menganalisis data geospatial berskala besar. Walau bagaimanapun, pengguna sering menghadapi masalah dengan masa pelaksanaan, walaupun skrip mereka kelihatan asas. Skrip yang mengambil masa beberapa minit untuk dijalankan boleh memberi kesan kepada produktiviti dan melambatkan cerapan.
Dalam kes ini, pengguna telah mencipta skrip mudah untuk memproses data Sentinel dan Landsat 8. Walaupun ringkas, skrip mengambil masa kira-kira 3-5 minit untuk dilaksanakan. Memahami sebab ini berlaku dan cara mengoptimumkan skrip adalah penting untuk pemprosesan data yang cekap.
Prestasi skrip GEE bergantung pada beberapa faktor, termasuk saiz data, penapisan dan kerumitan pengiraan. Mengurangkan masa pelaksanaan melibatkan mengenal pasti kesesakan dalam skrip, seperti operasi yang tidak perlu atau set data besar yang memperlahankan pemprosesan.
Artikel ini akan meneroka kemungkinan punca masa pelaksanaan yang perlahan dalam GEE dan memberikan petua praktikal untuk mengoptimumkan skrip yang diberikan. Dengan melaksanakan strategi ini, pengguna boleh meningkatkan kelajuan dan prestasi tugas analisis data geospatial mereka dengan ketara.
Perintah | Contoh Penggunaan |
---|---|
normalizedDifference() | Fungsi ini digunakan untuk mengira indeks seperti NDVI, NDWI, dan NDSI dengan mengira perbezaan antara dua jalur, dibahagikan dengan jumlahnya. Ia khusus untuk analisis penderiaan jauh di mana indeks tumbuh-tumbuhan, air dan salji diperlukan. |
filterBounds() | Menapis koleksi imej untuk memasukkan hanya imej yang bersilang dengan geometri tertentu. Dalam kes ini, ia mengehadkan data satelit ke kawasan sekitar tempat menarik yang ditentukan, menjadikan pemprosesan lebih cekap dengan mengecualikan data yang tidak berkaitan. |
filterDate() | Perintah ini mengehadkan koleksi imej kepada julat tarikh tertentu. Untuk masalah kami, adalah penting untuk menganalisis perbezaan antara tempoh masa yang sama untuk set data Sentinel dan Landsat. |
addBands() | Menambah jalur terkira baharu (seperti NDVI, NDWI dan NDSI) pada setiap imej dalam koleksi. Ini penting untuk menggunakan berbilang indeks pada koleksi imej yang sama tanpa membuat set data berasingan. |
unmask() | Mengisi piksel bertopeng dengan nilai yang ditentukan. Dalam skrip kami, ia digunakan untuk membuka topeng kawasan air kekal, memastikan data diproses secara konsisten di seluruh rantau. |
reduce() | Mengurangkan koleksi imej menggunakan fungsi pengurang yang ditentukan, seperti ee.Reducer.percentile(). Di sini, ia digunakan untuk mengira persentil ke-30 nilai piksel, mengoptimumkan penjanaan imej komposit. |
clip() | Klip imej ke sempadan kawasan yang diminati. Ini memastikan bahawa hanya data yang berkaitan dengan kawasan itu diproses, yang mempercepatkan pelaksanaan. |
gt() | Perintah ini bermaksud 'lebih besar daripada' dan digunakan untuk mencipta imej binari berdasarkan ambang. Dalam kes ini, ia mengenal pasti kawasan dengan kejadian air melebihi 80%. |
map() | Menggunakan fungsi pada setiap imej dalam koleksi. Dalam contoh kami, ia menggunakan fungsi addIndices untuk mengira NDVI, NDWI dan NDSI merentas semua imej dalam koleksi, memperkemas aliran kerja. |
Mengoptimumkan Skrip GEE untuk Peningkatan Kecekapan
Dalam skrip yang disediakan, matlamatnya adalah untuk mengekstrak dan memproses imejan satelit daripada dua sumber berbeza: Sentinel dan Landsat. The Enjin Google Earth (GEE) platform membolehkan pengguna mengakses sejumlah besar data satelit dan menggunakan pelbagai operasi seperti penapisan, pengindeksan dan visualisasi. Salah satu ciri utama yang digunakan dalam skrip ini ialah normalizedDifference() fungsi, yang digunakan untuk mengira indeks penting seperti NDVI, NDWI dan NDSI. Indeks ini penting untuk menganalisis tumbuh-tumbuhan, air dan litupan salji di kawasan yang ditentukan. Skrip bermula dengan mentakrifkan tempat menarik dan memusatkan peta di atasnya menggunakan koordinat yang disediakan.
Skrip menggunakan berbilang penapis, seperti filterDate() dan filterBounds(), untuk mengurangkan jumlah data yang sedang diproses, sekali gus meningkatkan masa pelaksanaan. Sebagai contoh, filterBounds() memastikan bahawa hanya imej yang bersilang dengan kawasan yang diminati disertakan, manakala filterDate() mengehadkan imej kepada julat tarikh tertentu. Ini penting untuk memproses set data yang besar seperti imejan Sentinel dan Landsat, kerana ia meminimumkan beban pengiraan. Selain itu, penapis untuk liputan awan membantu untuk membuang imej yang mempunyai terlalu banyak awan, memastikan analisis kualiti yang lebih baik.
Satu aspek penting dalam skrip ialah addBands() fungsi, yang menambahkan indeks terkira (NDVI, NDWI, NDSI) pada imejan, menjadikannya boleh diakses untuk analisis lanjut. Skrip ini juga menggabungkan topeng air kekal menggunakan data daripada set data Air Permukaan Global JRC. Topeng air membantu dalam mengecualikan kawasan dengan kejadian air yang tinggi (lebih daripada 80%), yang sebaliknya boleh memesongkan keputusan analisis tumbuh-tumbuhan dan salji. Ini dilakukan melalui gt() dan buka topeng() fungsi, yang membolehkan skrip mengasingkan kawasan berdasarkan nilai piksel.
Akhirnya, skrip menggunakan mengurangkan() berfungsi dengan pengurang persentil untuk menjana imej komposit yang mewakili persentil ke-30 nilai piksel yang dipilih. Imej komposit ini kemudiannya dipotong ke kawasan yang diminati dan divisualisasikan pada peta menggunakan klip() fungsi. Parameter visual ditakrifkan untuk kedua-dua komposit Sentinel dan Landsat, membolehkan pengguna melihatnya dengan tetapan warna yang sesuai. Dengan menggabungkan pelbagai langkah pemprosesan imej seperti penapisan, penyamaran dan penjanaan komposit, skrip ini menyediakan cara yang cekap untuk menganalisis imejan satelit, walaupun pengoptimuman selanjutnya boleh digunakan untuk mengurangkan masa pelaksanaan.
Mengoptimumkan Pelaksanaan Skrip Enjin Google Earth untuk Pemprosesan Lebih Pantas
Penyelesaian ini menggunakan Enjin Google Earth (GEE) dengan penekanan pada pengoptimuman prestasi dengan mengurangkan masa pengambilan data dan memudahkan operasi. JavaScript digunakan sebagai bahasa skrip.
var pointJSP = ee.Geometry.Point([86.465263, 20.168076]);
Map.centerObject(pointJSP, 14);
// Combine date variables for flexibility
var startDate = '2024-02-01';
var endDate = '2024-03-01';
// Function to add NDVI, NDWI, NDSI
var addIndices = function(image) {
var ndvi = image.normalizedDifference(['NIR', 'RED']).rename('NDVI');
var ndwi = image.normalizedDifference(['NIR', 'SWIR1']).rename('NDWI');
var ndsi = image.normalizedDifference(['SWIR1', 'SWIR2']).rename('NDSI');
return image.addBands(ndvi).addBands(ndwi).addBands(ndsi);
};
// Use fewer data points by filtering for cloud-free pixels only once
var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30));
Menggunakan Pemprosesan Data Cekap untuk GEE untuk Meminimumkan Kelewatan Skrip
Penyelesaian ini menyepadukan pengendalian data yang dioptimumkan dengan menggabungkan pengiraan indeks dan ambang. JavaScript digunakan untuk pemprosesan Enjin Google Earth.
var landsat8 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(pointJSP)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUD_COVER', 30));
// Apply water mask for permanent water areas
var waterMask = ee.Image('JRC/GSW1_4/GlobalSurfaceWater').select('occurrence').gt(80).unmask();
// Add indices to Landsat 8 imagery
var landsatIndices = landsat8.map(addIndices);
var composite = landsatIndices.reduce(ee.Reducer.percentile([30])).clip(pointJSP).mask(waterMask.eq(0));
Map.addLayer(composite, {bands: ['RED', 'GREEN', 'BLUE'], min: 0, max: 3000}, 'Landsat Composite');
Map.addLayer(waterMask, {min: 0, max: 1, palette: ['white', 'blue']}, 'Water Mask', false);
Meningkatkan Kecekapan Skrip Penderiaan Jauh
Satu pertimbangan utama apabila bekerja dengan skrip Google Earth Engine (GEE) ialah memastikan operasi dikendalikan dengan cekap. Walaupun penggunaan set data yang besar seperti Sentinel dan Landsat adalah perkara biasa dalam analisis alam sekitar, jumlah data yang banyak boleh melambatkan pelaksanaan skrip. Satu kaedah untuk meningkatkan prestasi ialah memastikan hanya data yang diperlukan sedang diproses. Menggunakan arahan seperti filterBounds() dan filterDate() meminimumkan saiz set data, yang membantu memperkemas pengiraan. Memilih julat tarikh dan kawasan geografi tertentu boleh mengurangkan masa pelaksanaan dengan ketara.
Aspek lain yang memberi kesan kepada prestasi skrip GEE ialah cara data diproses. Contoh skrip menggunakan fungsi untuk mengira indeks penting seperti NDVI, NDWI dan NDSI. Indeks ini ditambah sebagai jalur pada koleksi imej, yang membolehkan analisis yang lebih teliti. Walau bagaimanapun, kesilapan biasa ialah menggunakan fungsi sedemikian pada keseluruhan set data tanpa menapis terlebih dahulu. Adalah penting untuk menggunakan operasi sedemikian selepas penapisan untuk mengelakkan pengiraan yang tidak perlu pada data yang tidak berkaitan.
Visualisasi ialah satu lagi elemen skrip yang boleh dioptimumkan. Menambah terlalu banyak lapisan atau visualisasi yang kompleks boleh mengurangkan masa pemprosesan. Skrip menggunakan parameter visual yang dipratentukan untuk menghasilkan komposit, tetapi prestasi boleh dipertingkatkan dengan melumpuhkan lapisan tertentu melainkan ia diperlukan secara eksplisit. Ini membantu dalam memastikan skrip ringan sambil mengekalkan fungsinya. menggunakan klip() arahan juga memastikan bahawa hanya kawasan yang diperlukan diberikan, mengurangkan beban pemprosesan keseluruhan.
Soalan Lazim tentang Mengoptimumkan Skrip Enjin Google Earth
- Bagaimanakah saya boleh meningkatkan prestasi skrip GEE saya?
- Optimumkan penggunaan filterDate(), filterBounds(), dan kurangkan saiz set data anda sebelum diproses.
- Mengapakah skrip GEE saya mengambil masa yang lama untuk dijalankan?
- Set data yang besar dan pengiraan yang kompleks boleh melambatkan pelaksanaan. guna reduce() dan clip() untuk mengehadkan pemprosesan kepada kawasan yang berkaitan.
- Bolehkah saya mengurangkan bilangan imej yang diproses dalam GEE?
- Ya, dengan memohon filter() untuk liputan awan dan filterDate() untuk memberi tumpuan kepada tempoh tertentu.
- Bagaimanakah saya boleh memudahkan pengiraan indeks dalam skrip saya?
- Gunakan fungsi seperti addBands() untuk menyelaraskan menambah berbilang indeks (cth., NDVI, NDWI) dalam satu langkah.
- Adakah mungkin untuk menggambarkan hanya lapisan penting?
- Ya, lumpuhkan lapisan yang tidak perlu dan gunakan parameter visualisasi yang dipermudahkan dengan Map.addLayer() untuk prestasi yang lebih baik.
Pemikiran Akhir tentang Mengoptimumkan Skrip GEE
Mengoptimumkan skrip Enjin Google Earth melibatkan pengendalian set data yang besar dengan cekap, menggunakan penapis awal dan mengurangkan operasi data yang tidak perlu. Memfokuskan pada bahagian penting seperti menapis mengikut tarikh dan lokasi boleh mengurangkan masa pemprosesan dengan ketara.
Dengan menggabungkan fungsi seperti addBands dan menggunakan topeng ambang untuk menghapuskan data yang tidak berkaitan, prestasi skrip boleh dipertingkatkan lagi. Teknik ini boleh menyelaraskan pelaksanaan, menawarkan hasil yang lebih cepat dan penggunaan platform Enjin Google Earth yang lebih baik.
Sumber dan Rujukan untuk Mengoptimumkan Skrip Enjin Google Earth
- Artikel ini dibuat menggunakan kandungan berdasarkan dokumentasi Enjin Google Earth rasmi, yang memberikan cerapan tentang teknik pengoptimuman skrip. Panduan Enjin Google Earth
- Maklumat tambahan telah dikumpulkan daripada forum komuniti GEE, menawarkan perbincangan dan penyelesaian untuk meningkatkan prestasi dalam skrip yang kompleks. Komuniti Enjin Google Earth
- Amalan terbaik untuk mengendalikan set data yang besar telah dirujuk daripada literatur penderiaan jauh dan tutorial yang tersedia di pautan berikut. Balai Cerap Bumi NASA