បន្ទាប់ពីបញ្ចប់មេរៀន និស្សិតអាច៖
ក្រសួងមួយស្នើឱ្យក្រុមរបស់អ្នកផ្ដល់ NDVI មធ្យមរដូវប្រាំង សម្រាប់ខេត្តទាំង ២៥ និងស្រុកទាំងអស់ក្នុងខេត្តកំពង់ឆ្នាំង ដើម្បីកំណត់តំបន់ដែលរុក្ខជាតិខ្សោយ។ ពួកគេក៏ចង់ដឹងពីផ្ទៃទឹករដូវប្រាំងក្នុងខេត្តផង។ ក្នុង QGIS ការងារនេះត្រូវទាញយករូបភាពរាប់សិបផ្ទាំង កាត់តាមស្រុកនីមួយៗ ហើយរត់ Zonal Statistics ម្ដងមួយស្រទាប់។
សំណួរដែលមេរៀននេះឆ្លើយ៖
តើត្រូវបម្លែងរូបភាពមួយ ទៅជាលេខមួយសម្រាប់តំបន់មួយយ៉ាងដូចម្ដេច?
គិតម្នាក់ឯង ១ នាទី · ពិភាក្សាជាគូ ២ នាទី · ចែករំលែកជាមួយថ្នាក់។
រយៈពេលបង្រៀនដែលស្នើ៖ ៣ ម៉ោង · មេរៀនទី ៤ ក្នុងចំណោម ១៥
:material-presentation-play: ស្លាយបង្រៀនមេរៀននេះ
ក្នុងមេរៀនទី៣ យើងបានបង្កើតរូបភាពស្អាតមួយសម្រាប់ខេត្តទាំងមូល។ ប៉ុន្តែអ្នកសម្រេចចិត្តកម្រសួររករូបភាពណាស់។ ពួកគេសួររក លេខ៖ «ស្រុកណាមានរុក្ខជាតិតិចជាងគេ?» «ផ្ទៃទឹកក្នុងខេត្តមានប៉ុន្មានគីឡូម៉ែត្រការ៉េ?» «NDVI មធ្យមឆ្នាំនេះ ទាបជាងឆ្នាំមុនទេ?»
មេរៀននេះបង្រៀនរបៀបបម្លែងរូបភាពរាប់លានក្រឡា ទៅជាតារាងស្ថិតិតាមតំបន់ ដោយប្រើ reducer របស់ Earth Engine ហើយនាំចេញតារាង ឬរូបភាពនោះទៅ Google Drive សម្រាប់ Excel និង QGIS។
Reducer គឺជាមុខងារដែលយកតម្លៃច្រើន ហើយត្រឡប់តម្លៃតិចជាង (ភាគច្រើនតម្លៃមួយ)៖ មធ្យម ផលបូក ចំនួន អប្បបរមា អតិបរមា ភាគរយ (percentile) ឬអ៊ីស្តូក្រាម។
ក្នុង Earth Engine reducer ជាវត្ថុ ee.Reducer ដាច់ដោយឡែក ដែលអាចប្រើជាមួយមុខងារបង្រួមផ្សេងៗ៖
| មុខងារ | បង្រួមតាម | លទ្ធផល |
|---|---|---|
collection.reduce() · median() | ពេលវេលា (មេរៀនទី៣) | ee.Image មួយ |
image.reduceRegion() | លំហ ក្នុងតំបន់មួយ | ee.Dictionary |
image.reduceRegions() | លំហ ក្នុងតំបន់ច្រើន | ee.FeatureCollection |
image.reduceNeighborhood() | ក្រឡាជិតខាង (kernel) | ee.Image |
list.reduce() · fc.reduceColumns() | បញ្ជី ឬជួរឈរនៃតារាង | ee.Dictionary |
ការយល់ឃើញនេះសំខាន់៖ ee.Reducer.mean() ដដែលអាចផ្ដល់រូបភាពមធ្យមតាមពេលវេលា ឬលេខមធ្យមក្នុងស្រុកមួយ អាស្រ័យលើមុខងារដែលយើងហៅ។
ដូច្នេះត្រូវសួរខ្លួនឯងជានិច្ចថា៖ «ខ្ញុំកំពុងបង្រួមតាមវិមាត្រណា? »
រាយមុខងារបង្រួមបួន ហើយប្រាប់ថាមុខងារនីមួយៗបង្រួមតាមវិមាត្រណា និងត្រឡប់វត្ថុប្រភេទណា។
ឆ្លើយក្នុង ១ នាទី មុនបន្តទៅផ្នែកបន្ទាប់។
reduceRegion() គណនាស្ថិតិនៃក្រឡាទាំងអស់ក្នុងធរណីមាត្រមួយ ហើយត្រឡប់ Dictionary ដែលមានគន្លឹះមួយក្នុងមួយក្រុមរលក៖
```javascript var aoi = ee.FeatureCollection('FAO/GAUL/2015/level1') .filter(ee.Filter.eq('ADM1_NAME', 'Kampong Chhnang')); var ndvi = composite.normalizedDifference(['B8', 'B4']).rename('NDVI');
var stats = ndvi.reduceRegion(); print('NDVI មធ្យម', stats); // print('តម្លៃតែលេខ', …
ចំណុចត្រូវចាំ៖
.get('NDVI') ដើម្បីយកតម្លៃ ហើយរុំវាក្នុង ee.Number() ប្រសិនបើត្រូវគណនាបន្ត។count() ប្រាប់ពីចំនួនក្រឡាដែលពិតជាបានប្រើ។Earth Engine មិនធ្វើការលើក្រឡាដើមនៃរូបភាពដោយស្វ័យប្រវត្តិទេ។
ប្រសិនបើអ្នកមិនដាក់ scale ទេ Earth Engine ប្រើ scale លំនាំដើមនៃរូបភាព ដែលសម្រាប់ composite ជាញឹកញាប់ ១ ដឺក្រេ (~១១១ គម)៖ លទ្ធផលស្ទើរតែគ្មានន័យ។
ដូច្នេះ ត្រូវដាក់ scale ជានិច្ច៖ ១០ ម សម្រាប់ Sentinel-2 ៣០ ម សម្រាប់ Landsat ហើយធំជាងនេះ (១០០–៥០០ ម) តែពេលតំបន់ធំខ្លាំង ហើយអ្នកដឹងថាកំពុងបាត់បង់ព័ត៌មានលម្អិត។
គូររង្វង់ ឬប្រអប់លើរូបភាព NDVI Sentinel-2 ពិត ជ្រើស reducer និង scale ហើយមើលថាលេខ និងចំនួនក្រឡាប្ដូរយ៉ាងដូចម្ដេច។ ប្រៀបធៀប mean ជាមួយ max ពេល scale កើនឡើង។
ហេតុអ្វី mean ស្ទើរមិនប្ដូរ ប៉ុន្តែ max ប្ដូរច្រើន នៅពេល scale កើនឡើង?
ឆ្លើយក្នុង ១ នាទី មុនបន្តទៅផ្នែកបន្ទាប់។
នៅពេលតំបន់ធំ និង scale តូច ចំនួនក្រឡាអាចលើសដែនកំណត់ ហើយ Earth Engine បង្ហាញកំហុស៖
| សារកំហុស | មូលហេតុ | ដំណោះស្រាយ |
|---|---|---|
Too many pixels in the region | ក្រឡាលើស maxPixels (លំនាំដើម ១០ លាន) | ដាក់ maxPixels: 1e10 |
User memory limit exceeded | ក្រឡាមួយ tile ត្រូវការអង្គចងចាំច្រើន | ដាក់ tileScale: 4 (ឬ ៨ ១៦) |
Computation timed out | ការគណនាយូរជាង ៥ នាទីក្នុង Code Editor | ប្រើ Export ជំនួស print |
bestEffort: true ក៏ដោះស្រាយកំហុសក្រឡាច្រើនដែរ ប៉ុន្តែវាធ្វើដោយ បង្កើន scale ដោយស្ងាត់ៗ។
maxPixels និង tileScale ជាង bestEffort។tileScale បំបែកការគណនាជាផ្ទាំងតូចៗ៖ យឺតជាងបន្តិច ប៉ុន្តែប្រើអង្គចងចាំតិច។មធ្យមតែមួយលាក់ការបែងចែករបស់ទិន្នន័យ។
តំបន់ដែលមានទឹកពាក់កណ្ដាល និងរុក្ខជាតិពាក់កណ្ដាល អាចមាន NDVI មធ្យមប្រហែល ០,១ ដែលមិនតំណាងក្រឡាណាមួយទាល់តែសោះ។ combine() ភ្ជាប់ reducer ជាច្រើន ដើម្បីគណនាក្នុងការឆ្លងកាត់ទិន្នន័យតែម្ដង៖
```javascript var reducer = ee.Reducer.mean() .combine() .combine() .combine(); var stats = ndvi.reduceRegion({reducer: reducer, …
sharedInputs: true មានន័យថា reducer ទាំងអស់ប្រើក្រុមរលកដដែល។
reduceRegions() ទទួល FeatureCollection (ឧ. ស្រុកទាំងអស់) ហើយត្រឡប់ FeatureCollection ដដែល ដែល Feature នីមួយៗមានលក្ខណៈថ្មីពី reducer៖
```javascript var districts = ee.FeatureCollection('FAO/GAUL/2015/level2') .filter(ee.Filter.eq('ADM1_NAME', 'Kampong Chhnang'));
var table = ndvi.reduceRegions(); print(table.limit(5)); // ADM2_NAME, ..., mean ```
ចំណុចខុសពី reduceRegion៖ reduceRegions មិនមាន maxPixels ទេ ហើយឈ្មោះលក្ខណៈលទ្ធផលគឺឈ្មោះ reducer (mean) មិនមែន NDVI_mean ទេ។
លទ្ធផលគឺជាតារាងដែលមានធរណីមាត្រ៖ ដូច្នេះវាអាចបង្ហាញជាផែនទី choropleth ក្នុង Earth Engine ឬនាំចេញទៅ QGIS ដើម្បីធ្វើប្លង់ផែនទីតាមគោលការណ៍ក្នុងសៀវភៅទី១។
ភាពខុសគ្នារវាង maxPixels tileScale និង bestEffort?
ឆ្លើយក្នុង ១ នាទី មុនបន្តទៅផ្នែកបន្ទាប់។
ការគណនាផ្ទៃដោយ «ចំនួនក្រឡា × ១០០ ម²» ងាយខុស ព្រោះក្រឡាក្នុង EPSG:4326 មិនមានទំហំស្មើគ្នា ហើយ scale ដែលប្រើប្រហែលជាមិនមែន ១០ ម។
ee.Image.pixelArea() បង្កើតរូបភាពដែលក្រឡានីមួយៗមានតម្លៃស្មើនឹង ផ្ទៃពិតរបស់វា (ម²) នៅ scale ដែលប្រើ។ វិធី៖ គុណ pixelArea ជាមួយ mask (០/១) រួច sum៖
``javascript var water = composite.normalizedDifference(['B3', 'B11']).gt(0); // MNDWI > 0 var waterKm2 = water.multiply(ee.Image.pixelArea()).divide(1e6) .reduceRegion(); print('ផ្ទៃទឹក (គម²)', waterKm2); ``
សម្រាប់ផែនទីចាត់ថ្នាក់ (មេរៀនទី៦) reducer ជាក្រុម គណនាផ្ទៃនៃគ្រប់ថ្នាក់ក្នុងការហៅតែមួយ៖
```javascript var areas = ee.Image.pixelArea().divide(1e6).addBands(classified) .reduceRegion(), geometry: aoi.geometry(), scale: 10, maxPixels: 1e10 }); …
groupField: 1 មានន័យថា ក្រុមរលកទី ២ (លិបិក្រម ១) គឺជាលេខថ្នាក់ ហើយក្រុមរលកទី ១ គឺជាតម្លៃដែលត្រូវបូក។
print() និង ui.Chart ល្អសម្រាប់ពិនិត្យលទ្ធផលតូចៗភ្លាមៗ។
ប៉ុន្តែការគណនាក្នុង Code Editor មានកំណត់ពេល និងអង្គចងចាំ។ Export បញ្ជូនការងារទៅជា Task ដែលរត់នៅម៉ាស៊ីនមេ អាចចំណាយពេលរាប់ម៉ោង ហើយរក្សាលទ្ធផលទៅ Google Drive ឬ Asset៖
``javascript Export.table.toDrive(); ``
selectors សំខាន់ណាស់៖ បើគ្មានវា CSV រួមទាំងជួរឈរ .geo (ធរណីមាត្រជា GeoJSON) ដែលធ្វើឱ្យឯកសារធំ ហើយពិបាកបើកក្នុង Excel។ ប្រសិនបើត្រូវការផែនទីក្នុង QGIS សូមប្រើ fileFormat: 'SHP' ឬ 'GeoJSON' ជំនួសវិញ ឬរក្សា ADM2_CODE ដើម្បីភ្ជាប់ (join) ជាមួយស្រទាប់ព្រំដែនដែលអ្នកមានរួច។
description ក្លាយជាឈ្មោះឯកសារ។ ប្រើទម្រង់ តំបន់_អ្វី_ឆ្នាំ (ឧ. KCH_NDVI_dry_2024) ហើយកុំប្រើដកឃ្លា ឬអក្សរខ្មែរ ព្រោះ Earth Engine មិនទទួលយកទេ។
```javascript var prov = ee.FeatureCollection('FAO/GAUL/2015/level1') .filter(ee.Filter.eq('ADM1_NAME', 'Kampong Chhnang')); var districts = ee.FeatureCollection('FAO/GAUL/2015/level2') .filter(ee.Filter.eq('ADM1_NAME', …
``javascript print('ខេត្ត', ndvi.reduceRegion()); `` ការពិនិត្យលើតំបន់មួយមុន ជួយរកកំហុស (ឈ្មោះក្រុមរលកខុស scale ភ្លេច) …
```javascript var reducer = ee.Reducer.mean().combine(); var byDistrict = ndvi.reduceRegions(); …
``javascript Export.table.toDrive(); ``
បើកតារាងក្នុង Excel ហើយតម្រៀបតាម mean។
stdDev ខ្ពស់ប្រាប់ថាស្រុកនោះមានគម្របដីចម្រុះ ដូច្នេះមធ្យមរបស់វាតំណាងមិនល្អ។NDVI ទាបក្នុងរដូវប្រាំង មិនមានន័យថាដំណាំខ្សោយទេ៖ វាអាចជាស្រែដែលច្រូតរួច ដីទំនេរ ឬទឹក។ មធ្យមតាមស្រុកក៏លាក់ភាពខុសគ្នាក្នុងស្រុក និងពឹងលើព្រំដែន GAUL ដែលប្រហែលជាមិនត្រូវនឹងព្រំដែនរដ្ឋបាលផ្លូវការថ្មីបំផុតទេ។
លំហាត់ដំណើរការក្នុង Earth Engine Code Editor ជាមួយទិន្នន័យកាតាឡុក ហើយមានរូបលទ្ធផលគំរូ តារាងកំហុសទូទៅ និងប្រអប់ពិនិត្យលទ្ធផលដោយខ្លួនឯង។
Reducer បង្រួមតម្លៃច្រើនទៅជាតម្លៃតិច។ reduceRegion() ផ្ដល់ Dictionary សម្រាប់តំបន់មួយ ហើយ reduceRegions() បន្ថែមស្ថិតិទៅ Feature នីមួយៗនៃ FeatureCollection ដែលក្លាយជាតារាងសម្រាប់ Excel និងផែនទីសម្រាប់ QGIS។ combine() គណនាស្ថិតិច្រើនក្នុងការហៅតែមួយ ហើយ pixelArea() ជាមួយ reducer ជាក្រុម ផ្ដល់ផ្ទៃពិតតាមថ្នាក់។
scale ជាការសម្រេចចិត្តវិទ្យាសាស្ត្រ៖ វាប៉ះពាល់ដល់ max stdDev ផ្ទៃ និងចំនួនក្រឡា។ ត្រូវដាក់ scale ជានិច្ច ដោះស្រាយកំហុសដោយ maxPixels និង tileScale ហើយប្រើ Export សម្រាប់លទ្ធផលធំ ឬលទ្ធផលដែលត្រូវរក្សាទុក។
រូបភាពឆ្លើយសំណួរ «នៅទីណា?» ហើយ reducer ឆ្លើយសំណួរ «ប៉ុន្មាន?»។ ចម្លើយនោះត្រឹមត្រូវ លុះត្រាតែអ្នកដឹង និងរាយការណ៍ scale តំបន់ និងក្រឡាដែលបានប្រើ។
| ពាក្យខ្មែរ | ពាក្យអង់គ្លេស | អត្ថន័យខ្លី |
|---|---|---|
| មុខងារបង្រួម | Reducer | បម្លែងតម្លៃច្រើនទៅជាតម្លៃតិច |
| ស្ថិតិតាមតំបន់ | Zonal statistics | ស្ថិតិនៃក្រឡាក្នុងតំបន់នីមួយៗ |
| វចនានុក្រម | Dictionary | គូគន្លឹះ–តម្លៃ (ឧ. ) |
| មាត្រដ្ឋានគណនា | Scale | ទំហំក្រឡា (ម) ដែលប្រើក្នុងការគណនា |
| ពីរ៉ាមីតរូបភាព | Image pyramid | កម្រិតក្រឡាធំៗដែលគណនារួច |
| ផ្ទៃក្រឡា | Pixel area | ផ្ទៃពិត (ម²) នៃក្រឡានីមួយៗ |
| reducer ជាក្រុម | Grouped reducer | គណនាស្ថិតិតាមថ្នាក់នីមួយៗ |
| ការនាំចេញ | Export (Task) | រក្សាលទ្ធផលទៅ Drive ឬ Asset |
.geo និងរបៀបដកវាចេញ។stats.get('NDVI_mean') ត្រឡប់ null។ រាយមូលហេតុពីរដែលអាចកើតឡើង។គណនាផ្ទៃទឹក (MNDWI > ០) នៃខេត្តរបស់អ្នកក្នុងខែមីនា និងខែតុលា ឆ្នាំតែមួយ។ សរសេរកថាខណ្ឌមួយពន្យល់ភាពខុសគ្នា ហើយរាយការណ៍ scale និងចំនួនក្រឡាស្អាតដែលបានប្រើ។
មេរៀននេះគណនាស្ថិតិលើ composite មួយ ពោលគឺលេខមួយសម្រាប់រយៈពេលមួយ។ ប៉ុន្តែស្រែ ព្រៃ និងទឹកប្ដូររាល់ខែ ហើយការប្ដូរនោះហើយដែលប្រាប់ពីដំណាំ គ្រោះរាំងស្ងួត ឬការបាត់បង់ព្រៃ។
តើត្រូវតាមដានតម្លៃមួយតាមពេលវេលា ហើយបម្លែងក្រាបដែលមានពពកច្រើន ទៅជាព័ត៌មានអំពីរដូវដំណាំយ៉ាងដូចម្ដេច?
អានមេរៀនពេញ និងធ្វើលំហាត់ទី៤
https://khgeo.github.io/applied-gis-rs/lessons/lesson-04/