reduceRegion
หากต้องการดูสถิติของค่าพิกเซลในภูมิภาคของ ee.Image
ให้ใช้ image.reduceRegion()
ซึ่งจะลดพิกเซลทั้งหมดในภูมิภาคเป็นสถิติหรือการนําเสนอข้อมูลพิกเซลในภูมิภาคแบบกะทัดรัดอื่นๆ (เช่น ฮิสโตแกรม) ภูมิภาคจะแสดงเป็น Geometry
ซึ่งอาจเป็นรูปหลายเหลี่ยมที่มีหลายพิกเซล หรืออาจเป็นจุดเดียว ซึ่งในกรณีนี้จะมีเพียงพิกเซลเดียวในภูมิภาค ไม่ว่าในกรณีใด ผลลัพธ์ที่ได้จะเป็นสถิติที่มาจากพิกเซลในภูมิภาคนั้นๆ ดังที่แสดงในรูปที่ 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 และมาตราส่วน ระบบจะแรสเตอร์ภูมิภาคตามข้อมูลดังกล่าว
พิกเซลในภูมิภาค
ระบบจะพิจารณาว่าพิกเซลอยู่ในภูมิภาค (และถ่วงน้ำหนัก) ตามกฎต่อไปนี้ ซึ่งใช้กับมาตราส่วนและการฉายที่ระบุ
- ตัวลดที่ไม่ถ่วงน้ำหนัก (เช่น
ee.Reducer.count()
หรือee.Reducer.mean().unweighted()
): ระบบจะรวมพิกเซลหากจุดศูนย์กลางของพิกเซลนั้นอยู่ในขอบเขต และหน้ากากของรูปภาพไม่ใช่ 0 - ตัวลดที่มีน้ำหนัก (เช่น
ee.Reducer.mean()
): ระบบจะรวมพิกเซลไว้ด้วยหากมีอย่างน้อย (โดยประมาณ) 0.5% ของพิกเซลอยู่ในภูมิภาคนั้น และหน้ากากของรูปภาพไม่ใช่ 0 น้ำหนักของพิกเซลคือค่าต่ำสุดของหน้ากากของรูปภาพและเศษ (โดยประมาณ) ของพิกเซลที่ภูมิภาคนั้นครอบคลุม
ต้องมีพารามิเตอร์ maxPixels
เพื่อให้การคํานวณสําเร็จ หากไม่ใส่พารามิเตอร์นี้ในตัวอย่าง ระบบจะแสดงข้อผิดพลาดดังตัวอย่างต่อไปนี้
มีหลายวิธีในการแก้ไขข้อผิดพลาดเหล่านี้ เช่น เพิ่ม maxPixels
ดังที่แสดงในตัวอย่าง เพิ่ม scale
หรือตั้งค่า bestEffort
เป็น "จริง" ซึ่งจะคํานวณขนาดใหม่ (ใหญ่ขึ้น) โดยอัตโนมัติเพื่อไม่ให้เกิน maxPixels
หากคุณไม่ได้ระบุ maxPixels
ระบบจะใช้ค่าเริ่มต้น