reduceRegion
หากต้องการดูสถิติค่าพิกเซลในภูมิภาคของ ee.Image ให้ใช้
image.reduceRegion()
การดำเนินการนี้จะลดพิกเซลทั้งหมดในภูมิภาคเป็นสถิติหรือการแสดงข้อมูลพิกเซลแบบย่ออื่นๆ ในภูมิภาค (เช่น ฮิสโทแกรม) ภูมิภาคจะแสดงเป็น Geometry ซึ่งอาจเป็นรูปหลายเหลี่ยมที่มีหลายพิกเซล หรืออาจเป็นจุดเดียว ในกรณีนี้จะมีพิกเซลเพียง 1 พิกเซลในภูมิภาค ไม่ว่าจะในกรณีใดก็ตาม ดังที่แสดงในรูปที่ 1 เอาต์พุต
คือสถิติที่ได้จากพิกเซลในภูมิภาค
ee.Reducerที่ใช้กับรูปภาพ
และภูมิภาคตัวอย่างการรับสถิติพิกเซลในภูมิภาคของรูปภาพโดยใช้
reduceRegion() ให้พิจารณาการหาค่าสเปกตรัมเฉลี่ย
ของคอมโพสิต Landsat 5 ปีภายในขอบเขตของป่าสน Sierra Nevada (แสดงในรูปที่ 2)
// Load input imagery: Landsat 7 5-year composite. var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012'); // Load an input region: Sierra Nevada. var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3') .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada')) .first()); // Reduce the region. The region parameter is the Feature geometry. var meanDictionary = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), scale: 30, maxPixels: 1e9 }); // The result is a Dictionary. Print it. print(meanDictionary);
หากต้องการบังคับให้มีการคำนวณ เพียงแค่พิมพ์ผลลัพธ์ ซึ่งตัวแก้ไขโค้ดจะ
แสดงเป็น Dictionary ในคอนโซล เอาต์พุตควรมีลักษณะดังนี้
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563
โปรดทราบว่าในตัวอย่างนี้ การลดจะระบุโดยการระบุ reducer
(ee.Reducer.mean()), geometry (region.geometry()),
scale (30 เมตร) และ maxPixels สำหรับจำนวนสูงสุดของ
พิกเซลที่จะป้อนลงในตัวลด ควรระบุมาตราส่วนใน
การเรียก reduceRegion() เสมอ เนื่องจากในโฟลว์การประมวลผลที่ซับซ้อน ซึ่งอาจเกี่ยวข้องกับข้อมูลจากแหล่งที่มาต่างๆ ที่มีสเกลแตกต่างกัน ระบบจะไม่สามารถกำหนดสเกลของเอาต์พุตจากอินพุตได้อย่างชัดเจน ในกรณีดังกล่าว สเกลจะตั้งค่าเริ่มต้น
เป็น 1 องศา ซึ่งโดยทั่วไปจะให้ผลลัพธ์ที่ไม่น่าพอใจ ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Earth Engine จัดการสเกลได้ที่หน้านี้
การตั้งค่าสเกลทำได้ 2 วิธี ได้แก่ การระบุพารามิเตอร์ scale
หรือการระบุ CRS และการแปลง CRS (ดูข้อมูลเพิ่มเติมเกี่ยวกับ CRS และการเปลี่ยน CRS ได้ที่อภิธานศัพท์) ตัวอย่างเช่น meanDictionaryการลด (ด้านบน) เทียบเท่ากับรายการต่อไปนี้
// As an alternative to specifying scale, specify a CRS and a CRS transform. // Make this array by constructing a 4326 projection at 30 meters, // then copying the bounds of the composite, from composite.projection(). var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563]; // Perform the reduction, print the result. print(image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), crs: 'EPSG:4326', crsTransform: affine, maxPixels: 1e9 }));
โดยทั่วไปแล้ว การระบุสเกลก็เพียงพอและทำให้โค้ดอ่านง่ายขึ้น Earth Engine จะกำหนดพิกเซลที่จะป้อนลงในตัวลดโดยการแรสเตอร์ภูมิภาคก่อน หากระบุสเกลโดยไม่มี CRS ระบบจะแรสเตอร์ภูมิภาคในการฉายภาพดั้งเดิมของรูปภาพที่ปรับขนาดเป็นความละเอียดที่ระบุ หากระบุทั้ง CRS และมาตราส่วน ระบบจะ แปลงภูมิภาคเป็นแรสเตอร์ตามข้อมูลดังกล่าว
Pixel ในภูมิภาค
ระบบจะพิจารณาว่าพิกเซลอยู่ในภูมิภาค (และกำหนดน้ำหนัก) ตามกฎต่อไปนี้ ซึ่งใช้ในมาตราส่วนและการฉายภาพที่ระบุ
- ตัวลดทอนที่ไม่ถ่วงน้ำหนัก (เช่น
ee.Reducer.count()หรือee.Reducer.mean().unweighted()): ระบบจะรวมพิกเซลหากจุดศูนย์ถ่วงอยู่ใน ภูมิภาคและมาสก์ของรูปภาพไม่ใช่ 0 - ตัวลดน้ำหนัก (เช่น
ee.Reducer.mean()): รวมพิกเซลหากมีพิกเซลอย่างน้อย (โดยประมาณ) 1/256 (~0.4%) อยู่ในภูมิภาคและ มาสก์ของรูปภาพไม่ใช่ 0 โดยน้ำหนักคือค่าต่ำสุดของมาสก์ของรูปภาพและ เศษส่วน (โดยประมาณ) ของพิกเซลที่ครอบคลุมโดยภูมิภาค น้ำหนักการตัดกันของพิกเซลจะแสดงเป็นจำนวนเต็ม 8 บิต (0 ถึง 255) ภายใน โดยจะมีการหาปริมาณความครอบคลุมที่เป็นเศษส่วนเป็น 256 ระดับที่แยกกัน
ต้องมีพารามิเตอร์ maxPixels เพื่อให้การคำนวณสำเร็จ หากไม่ได้ระบุพารามิเตอร์นี้ในตัวอย่าง ระบบจะแสดงข้อผิดพลาดซึ่งมีลักษณะดังนี้
คุณมีตัวเลือกหลายอย่างในการแก้ไขข้อผิดพลาดเหล่านี้ ได้แก่ เพิ่ม maxPixels
ตามตัวอย่าง เพิ่ม scale หรือตั้งค่า bestEffort เป็น
true ซึ่งจะคำนวณสเกลใหม่ (ใหญ่ขึ้น) โดยอัตโนมัติเพื่อให้ไม่เกิน maxPixels
หากไม่ได้ระบุ maxPixels ระบบจะใช้ค่าเริ่มต้น