បន្ទាប់ពីបញ្ចប់មេរៀន និស្សិតអាច៖
ee.*) ហើយពន្យល់ថាហេតុអ្វីវាប្រព្រឹត្តខុសគ្នា។map() ជំនួស for loop។និស្សិតម្នាក់ចង់បោះពុម្ពចំនួនរូបភាពលើខេត្តរបស់គាត់ ហើយបើចំនួនលើស ៥០ គាត់ចង់ឃើញពាក្យ «គ្រប់គ្រាន់»។ គាត់សរសេរ៖
``javascript var n = s2.size(); if (n > 50) else ``
តើកូដ Earth Engine ដំណើរការនៅឯណា និងនៅពេលណា?
គិតម្នាក់ឯង ១ នាទី · ពិភាក្សាជាគូ ២ នាទី · ចែករំលែកជាមួយថ្នាក់។
រយៈពេលបង្រៀនដែលស្នើ៖ ៣ ម៉ោង · មេរៀនទី ២ ក្នុងចំណោម ១៥
:material-presentation-play: ស្លាយបង្រៀនមេរៀននេះ
និស្សិតភូមិវិទ្យាជាច្រើនបារម្ភថា ពួកគេត្រូវក្លាយជាអ្នកសរសេរកម្មវិធីមុនប្រើ Earth Engine។ តាមពិត ស្គ្រីបភាគច្រើនក្នុងវគ្គនេះប្រើតែ ធាតុ JavaScript ប្រហែលដប់ និង លំនាំតែមួយ៖ ត្រង → អនុវត្ត → សង្ខេប។ អ្វីដែលពិបាកពិតប្រាកដ មិនមែនវាក្យសម្ពន្ធទេ ប៉ុន្តែជាការយល់ថា …
មេរៀននេះបង្រៀន JavaScript គ្រប់គ្រាន់សម្រាប់ Earth Engine ពន្យល់ភាពខុសគ្នារវាង client និង server និងណែនាំមុខងារសំខាន់បំផុត map()។
JavaScript ជាភាសាដែលកម្មវិធីរុករកទាំងអស់យល់។
សម្រាប់វគ្គនេះ យើងត្រូវការតែធាតុដូចខាងក្រោម៖
```javascript // ១. អថេរ៖ ដាក់ឈ្មោះឱ្យតម្លៃ var province = 'Kampong Chhnang'; var year = 2024;
// ២. អារេ (list)៖ តម្លៃច្រើនតាមលំដាប់ var bands = ['B4', 'B3', 'B2'];
// ៣. វត្ថុ (object/dictionary)៖ ឈ្មោះ → តម្លៃ var vis = ;
// ៤. មុខងារ៖ ការងារដែលប្រើឡើងវិញបាន function addNDVI(img)
// ៥. មតិយោបល់ (comment)៖ ពន្យល់កូដ មិនដំណើរការ ```
ច្បាប់តូចៗដែលត្រូវចាំ៖ បញ្ចប់បន្ទាត់ដោយ ; អក្សរត្រូវក្នុងសញ្ញា '...' ឈ្មោះប្រកាន់អក្សរធំតូច (Map ≠ map) ហើយវង់ក្រចក () [] ត្រូវបិទជាគូជានិច្ច។
Code Editor គូសក្រហមលើកំហុសវាក្យសម្ព័ន្ធមុនអ្នកចុច Run។
រាយធាតុ JavaScript ចំនួនបួន ដែលប្រើញឹកញាប់ក្នុង Earth Engine ព្រមឧទាហរណ៍។
ឆ្លើយក្នុង ១ នាទី មុនបន្តទៅផ្នែកបន្ទាប់។
នៅពេលអ្នកសរសេរ var n = s2.size(); កម្មវិធីរុករកមិនបានរាប់អ្វីទាំងអស់ទេ។
n។print(n) Map.addLayer() ឬ Export។5 'abc' [1,2]) រស់នៅលើ client (កម្មវិធីរុករក)។ee.* (ee.Number ee.Image ee.List) រស់នៅលើ server ហើយត្រូវប្រើមុខងាររបស់វាផ្ទាល់៖| ធ្វើលើ client (ខុសសម្រាប់ ee) | ធ្វើលើ server (ត្រូវ) |
|---|---|
n > 50 | n.gt(50) |
a + b | a.add(b) |
if (...) | ee.Algorithms.If(cond, a, b) ឬ filter |
for (...) | .map(function(x) ) |
list[0] | list.get(0) |
n.getInfo() ទាញតម្លៃពីម៉ាស៊ីនមេមកកម្មវិធីរុករក ហើយ បង្កក កម្មវិធីរុករករហូតដល់ទទួលបាន។ វាដំណើរការលើតម្លៃតូច ប៉ុន្តែធ្វើឱ្យស្គ្រីបយឺត ឬគាំងលើទិន្នន័យធំ។ ប្រើ print() ជំនួស ព្រោះវាទាញតម្លៃដោយមិនបង្កក។
| វត្ថុ | ដូចអ្វីក្នុង QGIS | មុខងារប្រើញឹកញាប់ |
|---|---|---|
ee.Image | ស្រទាប់រ៉ាស្ទ័រ (ក្រុមរលកច្រើន) | select normalizedDifference updateMask clip |
ee.ImageCollection | ថតដែលមានរ៉ាស្ទ័រច្រើន | filterDate filterBounds map median |
ee.Geometry | ធរណីមាត្រមួយ | Point Rectangle buffer area |
ee.Feature | វត្ថុមួយ + គុណលក្ខណៈ | get set geometry |
ee.FeatureCollection | ស្រទាប់វ៉ិចទ័រ | filter map reduceColumns |
ee.Reducer | ស្ថិតិ | mean median sum histogram |
ឈ្មោះក្រុមរលក គុណលក្ខណៈ (properties) និងប្រព័ន្ធកូអរដោនេ ត្រូវបានរក្សាទុកជាមួយវត្ថុនីមួយៗ។
print(img) បង្ហាញព័ត៌មានទាំងនេះក្នុង Console៖ ទម្លាប់ល្អគឺ print វត្ថុរាល់ពេលអ្នកមិនប្រាកដ។
ហេតុអ្វី n > 50 មិនដំណើរការលើ ee.Number?
ឆ្លើយក្នុង ១ នាទី មុនបន្តទៅផ្នែកបន្ទាប់។
មុខងារ Earth Engine នីមួយៗ ត្រឡប់វត្ថុថ្មី ដោយមិនកែវត្ថុដើមទេ។
ដូច្នេះយើងអាចភ្ជាប់វាជាខ្សែ ហើយអានពីលើចុះក្រោម ដូចជាប្រយោគ៖ «យកបណ្ណសារ → ត្រងតាមខេត្ត → ត្រងតាមឆ្នាំ → ត្រងពពក → យកតម្លៃកណ្ដាល»។
ការគណនាទាំងមូល ពន្យារពេល (lazy) រហូតដល់ត្រូវការលទ្ធផល។
អត្ថប្រយោជន៍៖ Earth Engine មើលខ្សែការគណនាទាំងមូល ហើយគណនាតែក្រឡាដែលចាំបាច់ នៅគុណភាពដែលត្រូវនឹងកម្រិត zoom របស់ផែនទី។ នេះជាមូលហេតុដែលផែនទីបង្ហាញលឿន ទោះបីការគណនាប្រើរូបភាពរាប់រយក៏ដោយ។
នៅពេលអ្នក zoom ចេញ Earth Engine គណនាលើក្រឡាធំជាង (pyramid)។ ដូច្នេះតម្លៃដែលអ្នកឃើញក្នុង Inspector នៅ zoom ទាប អាចខុសពីតម្លៃនៅក្រឡា ១០ ម។ សម្រាប់ស្ថិតិ ត្រូវកំណត់ scale ដោយផ្ទាល់ (មេរៀនទី៤)។
map() យកមុខងារមួយ ហើយអនុវត្តវាលើធាតុនីមួយៗនៃ collection ស្របគ្នា នៅលើម៉ាស៊ីនមេ។
លទ្ធផលជា collection ថ្មី ដែលមានចំនួនធាតុដូចគ្នា៖
``javascript function addNDVI(img) var s2ndvi = s2.map(addNDVI); // គ្រប់រូបភាពមានក្រុមរលក NDVI print(s2ndvi.first().bandNames()); // ពិនិត្យ ``
ច្បាប់បីសម្រាប់មុខងារក្នុង map()៖ (១) ត្រូវ return វត្ថុប្រភេទដដែល (Image → Image) (២) មិនអាចប្រើ print() getInfo() ឬ Map.addLayer() ខាងក្នុង និង (៣) មិនអាចប្រើអថេរ JavaScript ដែលប្ដូរតម្លៃក្នុង loop។
ជ្រើសមុខងារ ហើយចុច «ដំណើរការ»។ សង្កេតថារូបភាពនីមួយៗត្រូវបានប្ដូរ ដាច់ដោយឡែកពីគ្នា ហើយចំនួនរូបភាពមិនប្ដូរ។
ពន្យល់ការគណនាពន្យារពេល និងអត្ថប្រយោជន៍របស់វា។
ឆ្លើយក្នុង ១ នាទី មុនបន្តទៅផ្នែកបន្ទាប់។
ស្គ្រីបភាគច្រើនក្នុងសៀវភៅនេះ ធ្វើតាមលំនាំតែមួយ៖ filter (ជ្រើសតែអ្វីដែលត្រូវការ) → map (គណនាលើធាតុនីមួយៗ) → reduce (សង្ខេបជាលទ្ធផលមួយ)។
ឧទាហរណ៍ NDVI អតិបរមារដូវប្រាំង៖
```javascript var ndviMax = s2.filterDate('2024-01-01', '2024-04-30') // filter .map(addNDVI) // map .select('NDVI') .max(); // reduce Map.addLayer(ndviMax, , …
នៅពេលស្គ្រីបមិនដំណើរការ សូមធ្វើតាមលំដាប់៖ (១) អានសារក្រហមក្នុង Console និងលេខបន្ទាត់ (២) print() អថេរមុនបន្ទាត់ដែលខុស ដើម្បីមើលប្រភេទ និងឈ្មោះក្រុមរលក (៣) សាកល្បងលើតំបន់តូច និងរយៈពេលខ្លីជាមុន (៤) …
លំហាត់ដំណើរការក្នុង Earth Engine Code Editor ជាមួយទិន្នន័យកាតាឡុក ហើយមានរូបលទ្ធផលគំរូ តារាងកំហុសទូទៅ និងប្រអប់ពិនិត្យលទ្ធផលដោយខ្លួនឯង។
JavaScript សម្រាប់ Earth Engine ត្រូវការតែអថេរ អារេ វត្ថុ និងមុខងារ។ ចំណុចសំខាន់គឺការបែងចែក client (កម្មវិធីរុករក) ពី server (ម៉ាស៊ីនមេ)៖ វត្ថុ ee.* ជាការពិពណ៌នាការគណនា ដែលដំណើរការតែពេលត្រូវការលទ្ធផល ហើយត្រូវប្រើមុខងាររបស់វាផ្ទាល់ ជំនួសប្រតិបត្តិករ JavaScript ធម្មតា។
map() អនុវត្តមុខងារលើគ្រប់ធាតុស្របគ្នា ហើយជាមួយ filter និង reduce វាបង្កើតលំនាំស្គ្រីបដែលប្រើក្នុងសៀវភៅទាំងមូល។
ក្នុង Earth Engine អ្នកមិនបញ្ជាកុំព្យូទ័រឱ្យធ្វើម្ដងមួយៗទេ៖ អ្នកពិពណ៌នាលទ្ធផលដែលចង់បាន ហើយម៉ាស៊ីនមេរកវិធីគណនាវា។
| ពាក្យខ្មែរ | ពាក្យអង់គ្លេស | អត្ថន័យខ្លី |
|---|---|---|
| អថេរ | Variable | ឈ្មោះដែលរក្សាតម្លៃ |
| មុខងារ | Function | ការងារដែលប្រើឡើងវិញបាន |
| ម៉ាស៊ីនភ្ញៀវ | Client | កម្មវិធីរុករករបស់អ្នក |
| ម៉ាស៊ីនមេ | Server | ម៉ាស៊ីនរបស់ Google ដែលគណនា |
| ការភ្ជាប់មុខងារ | Method chaining | ហៅមុខងារជាខ្សែ |
| ការគណនាពន្យារពេល | Lazy evaluation | គណនាតែពេលត្រូវការ |
| map | map | អនុវត្តមុខងារលើគ្រប់ធាតុ |
| Reducer | Reducer | បម្លែងតម្លៃច្រើនជាស្ថិតិ |
var total = 0; col.map(function(img));a + b * 2 ទៅជាកូដ ee ដែល a និង b ជា ee.Number។យកស្គ្រីបពីលំហាត់ទី១ ហើយបន្ថែមមតិយោបល់ជាភាសាខ្មែរ លើបន្ទាត់នីមួយៗ ដោយប្រាប់ថាបន្ទាត់នោះដំណើរការលើ client ឬ server។
យើងអាចត្រង និងអនុវត្តមុខងារលើ collection ហើយ។ ប៉ុន្តែរូបភាពដែលយើងប្រើនៅមានពពក ហើយយើងនៅមិនទាន់ដឹងពីរបៀបផ្គុំរូបភាពរាប់រយជារូបភាពស្អាតមួយ។
អានមេរៀនពេញ និងធ្វើលំហាត់ទី២
https://khgeo.github.io/applied-gis-rs/lessons/lesson-02/