คู่มือเริ่มต้นใช้งานนี้มีไว้เพื่อเป็นวิธีเริ่มต้นการเขียนโปรแกรมด้วย Earth Engine JavaScript API อย่างรวดเร็ว ดูข้อมูลเบื้องต้นเกี่ยวกับ JavaScript และแบบฝึกหัดเชิงลึกเพิ่มเติมเกี่ยวกับ Earth Engine API ได้ที่บทแนะนำ ดูรูปแบบการเขียนโค้ด JavaScript ที่แนะนําได้ที่คู่มือสไตล์ JavaScript ของ Google
Google Earth Engine ช่วยให้ผู้ใช้เรียกใช้อัลกอริทึมกับภาพถ่ายและเวกเตอร์ที่อ้างอิงตามภูมิศาสตร์ซึ่งจัดเก็บไว้ในโครงสร้างพื้นฐานของ Google ได้ Google Earth Engine API มีไลบรารีฟังก์ชันที่อาจใช้กับข้อมูลเพื่อแสดงและวิเคราะห์ แคตตาล็อกข้อมูลสาธารณะของ Earth Engine มีชุดข้อมูลเวกเตอร์และภาพถ่ายที่เผยแพร่ต่อสาธารณะจํานวนมาก นอกจากนี้ คุณยังสร้างเนื้อหาส่วนตัวในโฟลเดอร์ส่วนตัวของผู้ใช้ได้ด้วย
วิธีใช้เอกสารเหล่านี้
เอกสารประกอบของ Earth Engine ออกแบบมาสำหรับผู้ที่คุ้นเคยกับการวิเคราะห์ข้อมูลเชิงพื้นที่ เอกสารมีโครงสร้างตามประเภทข้อมูลเป็นหลัก เช่น การนำทางด้านซ้ายจะมีลิงก์ไปยังส่วนหรือหน้าเกี่ยวกับประเภทข้อมูลที่สำคัญ เช่น Image
, ImageCollection
, Feature
, FeatureCollection
, Geometry
, Reducer
, Chart
, Join
และ Array
คู่มือนี้จะอธิบายเกี่ยวกับประเภทเหล่านี้เพียงพอให้คุณเริ่มต้นใช้งาน นอกจากนี้ยังมีส่วนแมชชีนเลิร์นนิง อัลกอริทึมเฉพาะหรือเฉพาะเซ็นเซอร์ (เช่น อัลกอริทึมของ Landsat) แอปที่แสดงต่อสาธารณะ การจัดการข้อมูล (ชิ้นงาน) และรายละเอียดสำคัญเกี่ยวกับการทํางานภายในของ Earth Engine
ก่อนเริ่มต้นใช้งานฟีเจอร์เหล่านี้ ให้เริ่มที่นี่
ตัวแก้ไขโค้ด
ตัวแก้ไขโค้ดเป็นสภาพแวดล้อมแบบอินเทอร์แอกทีฟสําหรับการพัฒนาแอปพลิเคชัน Earth Engine (รูปที่ 1) แผงกลางมีเครื่องมือแก้ไขโค้ด JavaScript เหนือเครื่องมือแก้ไขจะมีปุ่มสำหรับบันทึกสคริปต์ปัจจุบัน เรียกใช้ และล้างแผนที่ ปุ่มรับลิงก์จะสร้าง URL ที่ไม่ซ้ำกันสำหรับสคริปต์ในแถบที่อยู่ แผนที่ในแผงด้านล่างจะมีเลเยอร์ที่สคริปต์เพิ่มเข้ามา ที่ด้านบนจะเป็นช่องค้นหาสำหรับชุดข้อมูลและสถานที่ แผงด้านซ้ายมีตัวอย่างโค้ด สคริปต์ที่คุณบันทึกไว้ ข้อมูลอ้างอิง API ที่ค้นหาได้ และเครื่องมือจัดการชิ้นงานสำหรับข้อมูลส่วนตัว แผงด้านขวามีเครื่องมือตรวจสอบสําหรับการค้นหาแผนที่ คอนโซลเอาต์พุต และตัวจัดการสําหรับงานที่ใช้เวลานาน ปุ่มความช่วยเหลือ คู่มือเครื่องมือแก้ไขโค้ดและคู่มือรับความช่วยเหลือ
ที่ด้านขวาบนมีลิงก์ไปยังคู่มือนี้และแหล่งข้อมูลอื่นๆ สำหรับการขอความช่วยเหลือ ดูข้อมูลเพิ่มเติมได้จาก
การเปิดและเรียกใช้โค้ดในเครื่องมือแก้ไขโค้ด
ขั้นตอนด้านล่างแสดงวิธีเปิด Earth Engine และเรียกใช้สคริปต์ที่กำหนดเองซึ่งแสดงรูปภาพ คุณอาจต้องติดตั้ง Chrome เวอร์ชันล่าสุด ซึ่งเป็นเว็บเบราว์เซอร์ของ Google ซึ่งมีให้ที่นี่ เพื่อให้ได้ผลลัพธ์ที่ดีที่สุด
- เปิดเครื่องมือแก้ไขโค้ด Earth Engine ได้ที่ code.earthengine.google.com
- ไปที่แท็บสคริปต์ทางด้านซ้ายสุดของตัวแก้ไขโค้ด คุณจะเห็นคอลเล็กชันสคริปต์ตัวอย่างที่เข้าถึง แสดง และวิเคราะห์ข้อมูล Earth Engine
- ในส่วน "คอลเล็กชันรูปภาพ" ให้เลือกตัวอย่าง "ภาพรวมที่กรองแล้ว" คุณจะเห็นสคริปต์ปรากฏขึ้นในคอนโซลกลาง กดปุ่มเรียกใช้เพื่อเรียกใช้สคริปต์ ตัวอย่างภาพคอมโพสิตที่กรองจะเลือกภาพ Landsat 7 ที่ตัดกันหรืออยู่ภายในเขตแดนของโคโลราโดและยูทาห์ จากนั้นจะแสดงภาพคอมโพสิตสีจริงของรูปภาพที่เลือก ตัวอย่างจะแนะนำวิธีการที่ใช้กันโดยทั่วไป เช่น
filter()
,clip()
และMap.addLayer()
โครงสร้างข้อมูล Earth Engine
โครงสร้างข้อมูลทางภูมิศาสตร์พื้นฐานที่สุด 2 รายการใน Earth Engine คือ Image
และ Feature
ซึ่งสอดคล้องกับประเภทข้อมูลแรสเตอร์และเวกเตอร์ตามลำดับ รูปภาพประกอบด้วยแถบต่างๆ และพจนานุกรมของพร็อพเพอร์ตี้
ฟีเจอร์ประกอบด้วย Geometry
และพจนานุกรมของพร็อพเพอร์ตี้ ImageCollection
จะจัดการกองรูปภาพ (เช่น อนุกรมเวลารูปภาพ) FeatureCollection
จะจัดการคอลเล็กชันฟีเจอร์ โครงสร้างข้อมูลพื้นฐานอื่นๆ ใน Earth Engine ได้แก่ Dictionary
, List
, Array
, Date
, Number
และ String
(ดูข้อมูลเพิ่มเติมเกี่ยวกับประเภทข้อมูลพื้นฐานได้จากบทแนะนำนี้ โปรดทราบว่าออบเจ็กต์เหล่านี้ทั้งหมดเป็นออบเจ็กต์ฝั่งเซิร์ฟเวอร์และจะไม่ได้รับการดัดแปลงในลักษณะเดียวกับออบเจ็กต์ JavaScript ฝั่งไคลเอ็นต์ (ดูข้อมูลเพิ่มเติม)
อัลกอริทึมของ Earth Engine
การดำเนินการใน API ทำได้หลายวิธีดังนี้
- การเรียกใช้เมธอดที่แนบอยู่กับออบเจ็กต์
- การเรียกใช้อัลกอริทึม
- การเรียกใช้ฟังก์ชันเฉพาะของตัวแก้ไขโค้ด
- การกําหนดฟังก์ชันใหม่
แท็บเอกสารของเครื่องมือแก้ไขโค้ดจะแสดงเมธอดของคลาส API แต่ละคลาส เช่น คลาส Image
มีเมธอด add()
เครื่องมือแก้ไขโค้ด (JavaScript)
var image3 = image1.add(image2);
วิธีนี้จะเพิ่มวงดนตรีของ image2
ลงในวงดนตรีของ image1
หมวดหมู่ ee.Algorithms
มีรายการอัลกอริทึมที่รองรับในปัจจุบันสำหรับการประมวลผลเฉพาะทางหรือเฉพาะโดเมน เช่น หากต้องการสร้างเลเยอร์ภูมิประเทศจากโมเดลความสูงเชิงตัวเลข (DEM) อินพุต ให้ทำดังนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
var terrainImage = ee.Algorithms.Terrain(dem);
ฟังก์ชันเฉพาะของเครื่องมือแก้ไขโค้ด ได้แก่ Map
และ Export
ซึ่งควบคุมวิธีเพิ่มเลเยอร์ลงในแผงแผนที่หรือส่งออกไปยัง Google ไดรฟ์ ตามลำดับ คุณยังสร้างฟังก์ชันใน JavaScript โดยใช้
เครื่องมือแก้ไขโค้ด (JavaScript)
var myFunction = function(args) { // do something return something; };
ดังที่แสดงในส่วนการแมป ฟังก์ชันที่ผู้ใช้กำหนดมีประโยชน์ในการสร้างฟังก์ชันการทำงานที่กำหนดเองหรือแก้ไของค์ประกอบของคอลเล็กชันโดยใช้สิ่งต่อไปนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
var collection2 = collection1.map(aFunction);
ส่วนต่อไปนี้แสดงแนวคิดเหล่านี้สําหรับ Use Case ง่ายๆ ต่างๆ
'Hello world!' JavaScript
การพิมพ์ข้อมูลไปยังคอนโซลเป็นงานพื้นฐานสำหรับการรับข้อมูลเกี่ยวกับออบเจ็กต์ การแสดงผลลัพธ์ตัวเลขของการคำนวณ การแสดงข้อมูลเมตาของออบเจ็กต์ หรือช่วยแก้ไขข้อบกพร่อง ตัวอย่าง "Hello World" อันโด่งดังในเครื่องมือแก้ไขโค้ดมีดังนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
print('Hello world!');
คัดลอกบรรทัดนี้ลงในเครื่องมือแก้ไขโค้ดของตัวแก้ไขโค้ด แล้วคลิกเรียกใช้ โปรดทราบว่าเอาต์พุตจะแสดงในแท็บคอนโซลทางด้านขวาของเครื่องมือแก้ไขโค้ด สําหรับตัวอย่างที่เกี่ยวข้องกับการตรวจจับระยะไกลมากขึ้น ตัวอย่างต่อไปนี้จะพิมพ์ข้อมูลเมตาของรูปภาพ Landsat 8
เครื่องมือแก้ไขโค้ด (JavaScript)
print(ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'));
ตรวจสอบเอาต์พุตในคอนโซลอย่างละเอียดเพื่อดูข้อมูลเมตาที่มีให้สำหรับภาพ Landsat
การเพิ่มข้อมูลลงในแผนที่
นอกจากการพิมพ์ข้อมูลไปยังคอนโซลแล้ว การเพิ่มข้อมูลลงใน Map
ยังเป็นการนําเสนอข้อมูลทางภูมิศาสตร์เป็นภาพ ใช้ Map.addLayer()
ในตัวอย่างต่อไปนี้ ระบบจะสร้างอินสแตนซ์ Image
(วิธีค้นหารูปภาพเหล่านี้จะอธิบายในภายหลัง) โดยใช้ ee.Image()
เพิ่มลงในแผนที่ด้วย Map.addLayer()
และวางแผนที่ไว้ตรงกลางรูปภาพ
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load an image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Center the map on the image. Map.centerObject(image, 9); // Display the image. Map.addLayer(image);
พารามิเตอร์ที่ 2 ของ Map.centerObject()
คือระดับการซูม โดยตัวเลขที่สูงขึ้นจะหมายถึงสเกลที่ใหญ่ขึ้น (ซูมเข้ามากขึ้น) พารามิเตอร์สําหรับฟังก์ชัน Map
มีคำอธิบายอย่างละเอียดในเอกสารอ้างอิง API ที่เข้าถึงได้จากแท็บเอกสาร หากรูปภาพไม่ตรงกับที่ต้องการ ให้กําหนดค่าพารามิเตอร์การแสดงผลด้วยอาร์กิวเมนต์เพิ่มเติมใน Map.addLayer()
เช่น
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load the image from the archive. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); // Define visualization parameters in an object literal. var vizParams = {bands: ['B5', 'B4', 'B3'], min: 0.02, max: 0.4, gamma: 1.3}; // Center the map on the image and display. Map.centerObject(image, 9); Map.addLayer(image, vizParams, 'Landsat 8 false color');
โปรดทราบว่าพารามิเตอร์การแสดงภาพได้รับการกำหนดโดยลิเทอรัลออบเจ็กต์ ซึ่งประกอบด้วยรายการย่านความถี่ที่จะแสดง ค่าการสะท้อนแสงต่ำสุดและสูงสุด และค่าแกมมา (ดูข้อมูลเพิ่มเติมเกี่ยวกับย่านความถี่ของ Landsat ได้ที่นี่ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแสดงภาพรูปภาพได้ที่นี่
ใช้ Map.addLayer()
เพื่อเพิ่มองค์ประกอบและคอลเล็กชันองค์ประกอบลงในแผนที่ เช่น
เครื่องมือแก้ไขโค้ด (JavaScript)
var counties = ee.FeatureCollection('TIGER/2018/Counties'); Map.addLayer(counties, {}, 'counties');
การค้นหารูปภาพ คอลเล็กชันรูปภาพ และคอลเล็กชันองค์ประกอบ
คุณสามารถค้นหารูปภาพ คอลเล็กชันรูปภาพ และคอลเล็กชันองค์ประกอบได้โดยค้นหาใน Earth Engine Data Catalog เช่น การป้อน "Landsat 8" ในช่องค้นหาจะแสดงผลเป็นรายการชุดข้อมูลแรสเตอร์ (ดูรายการชุดข้อมูล Earth Engine ทั้งหมดได้ที่แคตตาล็อกข้อมูล Earth Engine) คลิกชื่อชุดข้อมูลเพื่อดูคำอธิบายสั้นๆ ข้อมูลเกี่ยวกับความพร้อมใช้งานตามช่วงเวลา ผู้ให้บริการข้อมูล และรหัสคอลเล็กชัน คลิกปุ่มนําเข้าเพื่อสร้างส่วนนําเข้าที่ด้านบนของสคริปต์โดยอัตโนมัติซึ่งมีตัวแปรสําหรับคอลเล็กชันนี้
หรือจะคัดลอกรหัสคอลเล็กชันแล้ววางลงในโค้ดก็ได้ ตัวอย่างเช่น เลือกผลลัพธ์ TOA ระดับ 1 ของการค้นหา "Landsat 8" แล้วคัดลอกรหัสดังต่อไปนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
เนื่องจากเป็นคอลเล็กชันรูปภาพจำนวนมากที่ครอบคลุมพื้นผิวโลก การค้นหารูปภาพแต่ละรูปในคอลเล็กชันจึงต้องมีการกรองเพื่อจำกัดขอบเขตการค้นหาให้แคบลง หรือจะลดคอลเล็กชันรูปภาพให้เป็นรูปภาพเดียวก็ได้โดยใช้เทคนิคการคอมโพสและการสร้างภาพโมเสก ดูข้อมูลเพิ่มเติมเกี่ยวกับการกรองและการคอมโพส (ดูการลด) ในส่วนถัดไป
รายงานชุดองค์ประกอบยังดูผ่านแคตตาล็อกข้อมูลได้ด้วย การแสดงภาพมีขนาดเล็กกว่าคอลเล็กชันรูปภาพ แต่คุณจะเห็นขอบเขตระหว่างประเทศ สำมะโนประชากร ลุ่มน้ำ และพื้นที่คุ้มครอง เป็นต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการนําเข้าชุดข้อมูลเวกเตอร์ของคุณเองได้ที่นี่
การกรองและการจัดเรียง
บ่อยครั้งที่คุณต้องกรองคอลเล็กชันตามพื้นที่และ/หรือเวลาเพื่อจำกัดจำนวนผลลัพธ์ ตัวอย่างเช่น ลองพิจารณางานการจัดเรียงคอลเล็กชันภาพ Landsat 8 เพื่อค้นหาภาพที่ไม่มีเมฆของซานฟรานซิสโก ก่อนอื่น คุณต้องกําหนดภูมิภาคที่สนใจ ซึ่งจุดมักมีประโยชน์ในกรณีนี้ เปิดใช้งานแท็บเครื่องมือตรวจสอบทางด้านขวาของเครื่องมือแก้ไขโค้ด แล้วคลิกใกล้กับกึ่งกลางของพื้นที่สนใจ คัดลอกพิกัดจากแท็บเครื่องมือตรวจสอบ จากนั้นสร้าง Point
โดยใช้คำสั่งต่อไปนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
var point = ee.Geometry.Point(-122.262, 37.8719);
สร้างวันที่เริ่มต้นและวันที่สิ้นสุด
เครื่องมือแก้ไขโค้ด (JavaScript)
var start = ee.Date('2014-06-01'); var finish = ee.Date('2014-10-01');
กรองคอลเล็กชัน Landsat 8 โดยใช้จุดและวันที่ จากนั้นจัดเรียงโดยใช้พร็อพเพอร์ตี้ข้อมูลเมตา (ค้นพบระหว่างการตรวจสอบข้อมูลเมตาของภาพ Landsat 8) ดังนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
var filteredCollection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(point) .filterDate(start, finish) .sort('CLOUD_COVER', true);
คุณสามารถพิมพ์และตรวจสอบคอลเล็กชันนี้ได้อย่างปลอดภัย (หากคอลเล็กชันมีรูปภาพมากเกินไป การพิมพ์จะช้ามาก หมดเวลา หรือแสดงข้อผิดพลาด) โปรดทราบว่ารูปภาพในคอลเล็กชันคือ List
ที่เก็บไว้ในพร็อพเพอร์ตี้ "features" ของ ImageCollection
คุณสามารถคัดลอกรหัสของรูปภาพในคอลเล็กชันลงในตัวสร้าง Image
ดังด้านบน หรือรับภาพแรก (ชั้นเมฆต่ำที่สุด) ดังนี้
เครื่องมือแก้ไขโค้ด (JavaScript)
var first = filteredCollection.first();
เข้าถึงฟังก์ชันการกรอง Earth Engine ทั้งหมดโดยใช้ filter()
โดยให้ ee.Filter
เป็นอาร์กิวเมนต์ (วิธีการ filterBounds()
และ filterDate()
ที่ระบุไว้ด้านบนเป็นแป้นพิมพ์ลัด) ตัวอย่างเช่น คำสั่งต่อไปนี้จะสร้าง Filter
ใช้ Filter
เพื่อกรอง FeatureCollection
และแสดงผลลัพธ์
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load a feature collection. var featureCollection = ee.FeatureCollection('TIGER/2016/States'); // Filter the collection. var filteredFC = featureCollection.filter(ee.Filter.eq('NAME', 'California')); // Display the collection. Map.setCenter(-119.604, 37.798, 6); Map.addLayer(filteredFC, {}, 'California');
คณิตศาสตร์ของย่านความถี่
ดำเนินการทางคณิตศาสตร์กับรูปภาพโดยใช้เมธอด Image
ซึ่งอาจรวมถึงการรวมแถบ (ดัชนีสเปกตรัม) ความแตกต่างของรูปภาพ หรือการดำเนินการทางคณิตศาสตร์ เช่น การคูณด้วยค่าคงที่ เช่น คํานวณความแตกต่างระหว่างภาพดัชนีความแตกต่างของพืช (NDVI) ที่ห่างกัน 20 ปี
เครื่องมือแก้ไขโค้ด (JavaScript)
// This function gets NDVI from Landsat 5 imagery. var getNDVI = function(image) { return image.normalizedDifference(['B4', 'B3']); }; // Load two Landsat 5 images, 20 years apart. var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604'); var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611'); // Compute NDVI from the scenes. var ndvi1 = getNDVI(image1); var ndvi2 = getNDVI(image2); // Compute the difference in NDVI. var ndviDifference = ndvi2.subtract(ndvi1);
โปรดสังเกตการใช้ function
ที่ผู้ใช้กําหนดในตัวอย่างนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันในส่วนถัดไป
การแมป (สิ่งที่ควรทำแทนการใช้วงวน for)
ใช้ map()
เพื่อวนซ้ำรายการในคอลเล็กชัน (For loop ไม่ใช่วิธีที่ถูกต้องในการดำเนินการดังกล่าวใน Earth Engine และควรหลีกเลี่ยง) ฟังก์ชัน map()
ใช้กับ ImageCollection
, FeatureCollection
หรือ List
ได้ และรับ function
เป็นอาร์กิวเมนต์ อาร์กิวเมนต์ของฟังก์ชันคือองค์ประกอบของคอลเล็กชันที่มีการแมป ซึ่งมีประโยชน์สำหรับการแก้ไของค์ประกอบทุกรายการของคอลเล็กชันในลักษณะเดียวกัน เช่น การเพิ่ม ตัวอย่างเช่น โค้ดต่อไปนี้จะเพิ่มย่านความถี่ NDVI ลงในรูปภาพทุกรูปใน ImageCollection
เครื่องมือแก้ไขโค้ด (JavaScript)
// This function gets NDVI from Landsat 8 imagery. var addNDVI = function(image) { return image.addBands(image.normalizedDifference(['B5', 'B4'])); }; // Load the Landsat 8 TOA data, filter by location and date. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-06-01', '2014-10-01'); // Map the function over the collection. var ndviCollection = collection.map(addNDVI);
อีกงานหนึ่งที่พบบ่อยคือการเพิ่มพร็อพเพอร์ตี้ใหม่ (หรือ "แอตทริบิวต์" หรือ "ฟิลด์") ลงในองค์ประกอบใน FeatureCollection
ในตัวอย่างต่อไปนี้ พร็อพเพอร์ตี้ใหม่คือการคํานวณที่เกี่ยวข้องกับแอตทริบิวต์ที่มีอยู่ 2 รายการ
เครื่องมือแก้ไขโค้ด (JavaScript)
// This function creates a new property that is the sum of two existing properties. var addField = function(feature) { var sum = ee.Number(feature.get('property1')).add(feature.get('property2')); return feature.set({'sum': sum}); }; // Create a FeatureCollection from a list of Features. var features = ee.FeatureCollection([ ee.Feature(ee.Geometry.Point(-122.4536, 37.7403), {property1: 100, property2: 100}), ee.Feature(ee.Geometry.Point(-118.2294, 34.039), {property1: 200, property2: 300}), ]); // Map the function over the collection. var featureCollection = features.map(addField); // Print a selected property of one Feature. print(featureCollection.first().get('sum')); // Print the entire FeatureCollection. print(featureCollection);
โปรดทราบว่าต้องแคสต์เป็น ee.Number
เพื่อให้ระบบจดจำค่าพร็อพเพอร์ตี้เป็นตัวเลขเพื่อใช้เมธอด add()
) map()
สามารถเปลี่ยนประเภทคอลเล็กชันได้ เช่น
เครื่องมือแก้ไขโค้ด (JavaScript)
// This function returns the image centroid as a new Feature. var getGeom = function(image) { return ee.Feature(image.geometry().centroid(), {foo: 1}); }; // Load a Landsat 8 TOA collection. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-06-01', '2014-10-01'); // Map the function over the ImageCollection. var featureCollection = ee.FeatureCollection(collection.map(getGeom)); // Print the collection. print(featureCollection);
โปรดสังเกตพร็อพเพอร์ตี้ที่เพิ่ม (foo
) สําหรับองค์ประกอบแต่ละรายการที่สร้างจากเซนทรอยด์ของรูปภาพ ในบรรทัดสุดท้าย การแคสต์ทำให้คอลเล็กชันที่ได้มีลักษณะเป็น FeatureCollection
ลด
การลดขนาดเป็นวิธีรวบรวมข้อมูลตามช่วงเวลา พื้นที่ แถบ อาร์เรย์ และโครงสร้างข้อมูลอื่นๆ ใน Earth Engine API มีวิธีการต่างๆ สำหรับวัตถุประสงค์นี้ เช่น หากต้องการสร้างภาพคอมโพสิตของ ImageCollection
ให้ใช้ reduce()
เพื่อลดจำนวนรูปภาพในคอลเล็กชันให้เหลือเพียงรูปเดียว ตัวอย่างง่ายๆ คือการสร้างภาพคอมโพสิตค่ามัธยฐานของภาพที่มีเมฆน้อยที่สุด 5 ภาพในคอลเล็กชัน Landsat 8 ที่ระบุไว้ก่อนหน้านี้
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load a Landsat 8 TOA collection. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') // Filter by date and location. .filterBounds(ee.Geometry.Point(-122.262, 37.8719)) .filterDate('2014-01-01', '2014-12-31') // Sort by increasing cloudiness. .sort('CLOUD_COVER'); // Compute the median of each pixel for each band of the 5 least cloudy scenes. var median = collection.limit(5).reduce(ee.Reducer.median());
การลดขนาดยังเป็นวิธีรับสถิติของรูปภาพในภูมิภาคที่กําหนดโดย Feature
หรือ FeatureCollection
ด้วย สมมติว่างานคือการคำนวณค่าพิกเซลเฉลี่ยภายในพื้นที่สนใจ ใช้ reduceRegion()
เพื่อวัตถุประสงค์นี้ เช่น
เครื่องมือแก้ไขโค้ด (JavaScript)
// Load and display a Landsat TOA image. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318'); Map.addLayer(image, {bands: ['B4', 'B3', 'B2'], max: 0.3}); // Create an arbitrary rectangle as a region and display it. var region = ee.Geometry.Rectangle(-122.2806, 37.1209, -122.0554, 37.2413); Map.addLayer(region); // Get a dictionary of means in the region. Keys are bandnames. var mean = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region, scale: 30 });
ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวลดจากเอกสารตัวลด
การมาสก์
พิกเซลทุกพิกเซลใน ee.Image
มีทั้งค่าและหน้ากากซึ่งมีค่าอยู่ในช่วง 0 (ไม่มีข้อมูล) ถึง 1 ระบบจะถือว่าพิกเซลที่มีการมาสก์ (ซึ่ง mask==0) เป็น "ไม่มีข้อมูล" พิกเซลที่มี 0 < มาสก์ ≤ 1 จะมีค่า แต่ระบบจะถ่วงน้ำหนักด้วยมาสก์สําหรับการคํานวณตัวเลข
คุณทําให้พิกเซลโปร่งใสหรือยกเว้นพิกเซลจากการวิเคราะห์ได้โดยใช้มาสก์ ระบบจะใส่มาสก์พิกเซลเมื่อค่ามาสก์เป็น 0 ตัวอย่างการใช้การหาความแตกต่างของภาพเพื่อแสดงพื้นที่ที่มี NDVI เพิ่มขึ้นและลดลงในช่วงที่ต่างกัน
// This function gets NDVI from Landsat 5 imagery. var getNDVI = function(image) { return image.normalizedDifference(['B4', 'B3']); }; // Load two Landsat 5 images, 20 years apart. var image1 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_19900604'); var image2 = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_044034_20100611'); // Compute NDVI from the scenes. var ndvi1 = getNDVI(image1); var ndvi2 = getNDVI(image2); // Compute the difference in NDVI. var ndviDifference = ndvi2.subtract(ndvi1); // Load the land mask from the SRTM DEM. var landMask = ee.Image('CGIAR/SRTM90_V4').mask(); // Update the NDVI difference mask with the land mask. var maskedDifference = ndviDifference.updateMask(landMask); // Display the masked result. var vizParams = {min: -0.5, max: 0.5, palette: ['FF0000', 'FFFFFF', '0000FF']}; Map.setCenter(-122.2531, 37.6295, 9); Map.addLayer(maskedDifference, vizParams, 'NDVI difference');
ในตัวอย่างนี้ โปรดทราบว่ามาสก์ของความแตกต่างของ NDVI ได้รับการอัปเดตโดยมาสก์ที่ดินที่มี updateMask()
ซึ่งจะตั้งค่ามาสก์ของพิกเซลความแตกต่าง NDVI เป็นมาสก์ที่ดินเมื่อใดก็ตามที่มาสก์ความแตกต่าง NDVI ไม่ใช่ 0
การมาสก์ยังมีประโยชน์ในการยกเว้นข้อมูลจากการวิเคราะห์ด้วย ลองดูตัวอย่าง reduceRegion()
จากส่วนการลด สมมติว่างานคือการคำนวณ NDVI เฉลี่ยตามฤดูกาลสำหรับซานตาแคลราเคาน์ตี รัฐแคลิฟอร์เนีย โดยยกเว้นพิกเซลที่มีเมฆ ตัวอย่างต่อไปนี้แสดงแนวคิดหลายอย่าง ได้แก่ การกรอง การแมป การลด และการใช้มาสก์เมฆ
เครื่องมือแก้ไขโค้ด (JavaScript)
// This function gets NDVI from a Landsat 8 image. var addNDVI = function(image) { return image.addBands(image.normalizedDifference(['B5', 'B4'])); }; // This function masks cloudy pixels. var cloudMask = function(image) { var clouds = ee.Algorithms.Landsat.simpleCloudScore(image).select(['cloud']); return image.updateMask(clouds.lt(10)); }; // Load a Landsat collection, map the NDVI and cloud masking functions over it. var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') .filterBounds(ee.Geometry.Point([-122.262, 37.8719])) .filterDate('2014-03-01', '2014-05-31') .map(addNDVI) .map(cloudMask); // Reduce the collection to the mean of each pixel and display. var meanImage = collection.reduce(ee.Reducer.mean()); var vizParams = {bands: ['B5_mean', 'B4_mean', 'B3_mean'], min: 0.02, max: 0.4}; Map.addLayer(meanImage, vizParams, 'mean'); // Load a region in which to compute the mean and display it. var counties = ee.FeatureCollection('TIGER/2018/Counties'); var santaClara = ee.Feature(counties.filter(ee.Filter.eq('NAME', 'Santa Clara')).first()); Map.addLayer(santaClara); // Get the mean of NDVI in the region. var mean = meanImage.select(['nd_mean']).reduceRegion({ reducer: ee.Reducer.mean(), geometry: santaClara.geometry(), scale: 30 }); // Print mean NDVI for the region. mean.get('nd_mean').evaluate(function(val){ print('Santa Clara spring mean NDVI:', val); });