ก่อนหน้านี้ คุณได้เรียนรู้วิธีรับภาพ Landsat แต่ละภาพโดยทำสิ่งต่อไปนี้ โดยที่ l8 และ point เป็นการนำเข้าที่แสดงถึงคอลเล็กชัน Landsat 8 TOA และเรขาคณิตของพื้นที่ที่สนใจ
ตัวแก้ไขโค้ด (JavaScript)
// Define a point of interest. Use the UI Drawing Tools to import a point // geometry and name it "point" or set the point coordinates with the // ee.Geometry.Point() function as demonstrated here. var point = ee.Geometry.Point([-122.292, 37.9018]); // Import the Landsat 8 TOA image collection. var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); // Get the least cloudy image in 2015. var image = ee.Image( l8.filterBounds(point) .filterDate('2015-01-01', '2015-12-31') .sort('CLOUD_COVER') .first() );
สมมติว่าตอนนี้คุณต้องการคำนวณภาพดัชนีพืชพรรณที่ปรับให้เป็นมาตรฐาน (NDVI) จากภาพ Landsat พืชพรรณจะสะท้อนแสงในส่วนอินฟราเรดใกล้ (NIR) ของสเปกตรัมแม่เหล็กไฟฟ้า และดูดซับแสงในส่วนสีแดง (ดูข้อมูลเพิ่มเติมเกี่ยวกับการสะท้อน NIR จากพืชพรรณ) NDVI ใช้ข้อมูลนี้เพื่อสร้างค่าเดียวที่สะท้อนถึงกิจกรรมการสังเคราะห์แสงที่เกิดขึ้นที่พิกเซลโดยประมาณ การคำนวณคือ (NIR - แดง) / (NIR + แดง) ซึ่งจะให้ผลลัพธ์เป็นตัวเลขระหว่าง 1 ถึง -1 โดยพิกเซลที่มีกิจกรรมการสังเคราะห์แสงสูงจะมี NDVI สูง วิธีหนึ่งในการคำนวณ NDVI ใน Earth Engine มีดังนี้
ตัวแก้ไขโค้ด (JavaScript)
// Compute the Normalized Difference Vegetation Index (NDVI). var nir = image.select('B5'); var red = image.select('B4'); var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI'); // Display the result. Map.centerObject(image, 9); var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']}; Map.addLayer(ndvi, ndviParams, 'NDVI image');
ผลลัพธ์ควรมีลักษณะคล้ายกับรูปที่ 8 โปรดทราบว่าเราใช้ฟังก์ชัน select() ที่คุณได้เรียนรู้ในส่วนก่อนหน้าเกี่ยวกับการมาสก์เพื่อรับย่านความถี่ NIR และย่านความถี่สีแดง จากนั้นคำนวณ NDVI โดยใช้โอเปอเรเตอร์ทางคณิตศาสตร์ของรูปภาพที่คุณเคยเห็นมาก่อนในส่วนเกี่ยวกับคณิตศาสตร์ Image สุดท้าย ให้แสดงรูปภาพด้วยชุดสี ในตัวอย่างนี้ เราใช้ชื่อสีแทนสตริงฐานสิบหกในชุดสี (ดูรายละเอียดได้ที่ข้อมูลอ้างอิงภายนอกเกี่ยวกับสี CSS)
การดำเนินการหาความแตกต่างที่ปรับมาตรฐานแล้วเป็นที่นิยมอย่างมากในการสำรวจระยะไกล จึงมีฟังก์ชันทางลัดใน ee.Image ซึ่งมีประโยชน์ในการลดความซับซ้อนของโค้ดในตัวอย่างก่อนหน้านี้
ตัวแก้ไขโค้ด (JavaScript)
var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
การแมปฟังก์ชันกับคอลเล็กชัน
สมมติว่าตอนนี้คุณต้องการเพิ่ม NDVI ลงในรูปภาพทุกรูปในคอลเล็กชันรูปภาพ วิธีดำเนินการใน Earth Engine คือmap()ฟังก์ชันในคอลเล็กชัน
อย่าสับสนระหว่าง map() กับออบเจ็กต์ Map โดยวิธีแรกเป็นเมธอดในคอลเล็กชัน และใช้ map ในความหมายของการประมวลผลแบบขนานของการใช้ฟังก์ชันกับทุกองค์ประกอบในคอลเล็กชัน ฟังก์ชันจะกำหนดการดำเนินการที่จะใช้กับทุกองค์ประกอบในคอลเล็กชัน คุณได้เห็นฟังก์ชันง่ายๆ ในบทแนะนำ JavaScript แล้ว แต่ตอนนี้เราจะสร้างฟังก์ชันที่มีฟังก์ชันการทำงานของ Earth Engine เช่น คัดลอกโค้ด NDVI ก่อนหน้าลงในฟังก์ชันที่แสดงผลรูปภาพอินพุตที่มีแบนด์ NDVI ดังนี้
ตัวแก้ไขโค้ด (JavaScript)
var addNDVI = function(image) { var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI'); return image.addBands(ndvi); }; // Test the addNDVI function on a single image. var ndvi = addNDVI(image).select('NDVI');
โค้ดนี้อาจไม่มีประสิทธิภาพในการคำนวณ NDVI สำหรับรูปภาพเดียว แต่ฟังก์ชันนี้สามารถใช้เป็นอาร์กิวเมนต์สำหรับ map() เพื่อเพิ่มแบนด์ NDVI ลงในรูปภาพทุกรูปในคอลเล็กชันได้ การทดสอบฟังก์ชันกับรูปภาพเดียวก่อนมักจะมีประโยชน์ เพื่อให้แน่ใจว่าฟังก์ชันทำงานตามที่คุณคาดหวัง เมื่อทดสอบฟังก์ชันกับรูปภาพแต่ละรูปและพิจารณาแล้วว่าฟังก์ชันทำงานตามที่ต้องการ คุณจะแมปฟังก์ชันกับคอลเล็กชันได้โดยทำดังนี้
ตัวแก้ไขโค้ด (JavaScript)
var withNDVI = l8.map(addNDVI);
หากต้องการยืนยันว่าการดำเนินการนี้จะใส่แบนด์ NDVI ในทุกรูปภาพในคอลเล็กชันนี้จริงๆ คุณสามารถเพิ่มคอลเล็กชัน withNDVI ลงในแผนที่และค้นหาตำแหน่งแบบสุ่มด้วยแท็บเครื่องมือตรวจสอบ คุณควรสังเกตเห็นว่าแต่ละรูปภาพในคอลเล็กชันมีแบนด์ชื่อ NDVI แล้ว
สร้างภาพรวมพิกเซลที่เขียวที่สุด
เมื่อคุณสร้างคอลเล็กชันรูปภาพที่แต่ละรูปมีแบนด์ NDVI แล้ว เราจะสำรวจวิธีใหม่ในการสร้างภาพรวม นั่นคือ qualityMosaic() คุณอาจสังเกตเห็นความไม่ต่อเนื่องระหว่างเส้นทาง Landsat แม้ในภาพรวมพิกเซลค่ามัธยฐาน สาเหตุส่วนหนึ่งอาจเกิดจากความแตกต่างในปรากฏการณ์วิทยา ซึ่งเป็นผลมาจากรูปภาพในเส้นทางที่อยู่ติดกันซึ่งรวบรวมในเวลาที่ต่างกัน (โดยเฉพาะห่างกัน 8 วัน) วิธีหนึ่งในการลดปัญหานี้คือการพยายามตั้งค่าพิกเซลในภาพรวมจากระยะฟีโนโลยีที่ใกล้เคียงกัน เช่น ช่วงเวลาที่พืชมีความเขียวมากที่สุด (เมื่อใบไม้ขึ้นและสังเคราะห์แสงได้) หากเรากำหนดให้ความเขียวสูงสุดเป็นค่า NDVI สูงสุด เราจะใช้ qualityMosaic() เพื่อสร้างภาพคอมโพสิตที่แต่ละพิกเซลมีพิกเซล NDVI สูงสุดจากคอลเล็กชันได้
ตอนนี้คุณสามารถใช้แบนด์ NDVI ที่เพิ่มเข้ามาในคอลเล็กชัน withNDVI ได้แล้ว
ตัวแก้ไขโค้ด (JavaScript)
// Make a "greenest" pixel composite. var greenest = withNDVI.qualityMosaic('NDVI'); // Display the result. var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3}; Map.addLayer(greenest, visParams, 'Greenest pixel composite');
ผลลัพธ์ของโค้ดนี้ควรมีลักษณะดังรูปที่ 9 เมื่อเปรียบเทียบรูปที่ 9 กับภาพคอมโพสิตค่ามัธยฐานที่แสดงในรูปที่ 6 จะเห็นว่าภาพคอมโพสิตพิกเซลที่เขียวที่สุดนั้นเขียวกว่ามากจริงๆ อย่างไรก็ตาม การตรวจสอบแหล่งน้ำอย่างใกล้ชิดจะทำให้เห็นปัญหาที่แตกต่างออกไปอย่างชัดเจน โดยเฉพาะอย่างยิ่ง แหล่งน้ำจะปรากฏเป็นสีขุ่น ซึ่งเป็นผลมาจากวิธีการทำงานของเมธอด qualityMosaic() โดยระบบจะตรวจสอบอนุกรมเวลาทั้งหมดในแต่ละตำแหน่ง และตั้งค่าพิกเซลที่มีค่าสูงสุดในย่านความถี่ NDVI เป็นค่าคอมโพสิต เนื่องจาก NDVI เหนือเมฆสูงกว่าเหนือน้ำ พื้นที่น้ำจึงมีพิกเซลที่มีเมฆ ในขณะที่พื้นที่ที่มีพืชพรรณทั้งหมดปรากฏเป็นสีเขียวเนื่องจาก NDVI จะสูงที่สุดเมื่อพืชพรรณในพิกเซลมีการสังเคราะห์แสง
ตอนนี้คุณได้เห็นวิธีต่างๆ ในการจัดองค์ประกอบและโมเสกรูปภาพใน Earth Engine แล้ว คุณสามารถสร้างภาพคอมโพสิตค่าล่าสุด ค่ามัธยฐาน หรือพิกเซลสีเขียวที่สุดจากรูปภาพที่กรองตามเวลาและสถานที่ หรือรูปภาพทั้งหมดในคอลเล็กชัน คุณได้เรียนรู้วิธีการคำนวณภาพและดึงข้อมูลแล้ว หน้าถัดไปจะครอบคลุมวิธีรับข้อมูลจาก Earth Engine เช่น เป็นแผนภูมิหรือชุดข้อมูลที่ส่งออกไปยังโฟลเดอร์ Google ไดรฟ์