ออบเจ็กต์ Earth Engine

เมื่อคุ้นเคยกับ JavaScript แล้ว มาดูวิธีใส่ออบเจ็กต์ JavaScript และ Primitive ลงในคอนเทนเนอร์ของ Earth Engine เพื่อส่งไปยังเซิร์ฟเวอร์และประมวลผลที่ Google

สตริง

เช่น กำหนดสตริง แล้วใส่ลงในคอนเทนเนอร์ ee.String() เพื่อส่งไปยัง Earth Engine

โปรแกรมแก้ไขโค้ด (JavaScript)

// Define a string, then put it into an EE container.
var aString = 'To the cloud!';
var eeString = ee.String(aString);
print('Where to?', eeString);

คิดว่า ee.Thing เป็นคอนเทนเนอร์สำหรับสิ่งที่มีอยู่ในเซิร์ฟเวอร์ ใน ตัวอย่างนี้ เราจะกำหนดสตริงก่อน แล้วจึงใส่ลงในคอนเทนเนอร์ นอกจากนี้ คุณยัง กำหนดคอนเทนเนอร์และเนื้อหาทั้งหมดพร้อมกันได้ด้วย เช่น

โปรแกรมแก้ไขโค้ด (JavaScript)

// Define a string that exists on the server.
var serverString = ee.String('This is on the server.');
print('String on the server:', serverString);

แม้ว่าอาร์กิวเมนต์แรกของ print() จะเป็นเพียงสตริงในไคลเอ็นต์ แต่ระบบจะส่งอาร์กิวเมนต์ที่ 2 ไปยังเซิร์ฟเวอร์เพื่อประเมิน จากนั้นจึงส่งกลับ

Numbers

ใช้ ee.Number() เพื่อสร้างออบเจ็กต์ตัวเลขในเซิร์ฟเวอร์ เช่น ใช้ Math.Eเมธอด JavaScript เพื่อสร้างค่าคงที่ในเซิร์ฟเวอร์

โปรแกรมแก้ไขโค้ด (JavaScript)

// Define a number that exists on the server.
var serverNumber = ee.Number(Math.E);
print('e=', serverNumber);

เมธอด ee.String() และ ee.Number() คือ ตัวสร้าง ตัวสร้างจะรับอาร์กิวเมนต์ (และอาจมีพารามิเตอร์อื่นๆ) ใส่ไว้ในคอนเทนเนอร์ แล้วส่งคืนคอนเทนเนอร์และเนื้อหาเป็นออบเจ็กต์ Earth Engine ที่คุณสามารถจัดการในโค้ดได้ ตัวสร้างใดก็ตามที่ขึ้นต้นด้วย ee จะแสดงผลออบเจ็กต์ Earth Engine

เมธอดในออบเจ็กต์ Earth Engine

โปรดทราบว่าเมื่อสร้างออบเจ็กต์ Earth Engine แล้ว คุณจะต้องใช้วิธีการของ Earth Engine เพื่อประมวลผล ในตัวอย่างนี้ คุณไม่สามารถใช้ Math.log() ของ JavaScript เพื่อประมวลผลออบเจ็กต์ Earth Engine นั้นได้ คุณต้องใช้วิธีการที่เทียบเท่าซึ่งกำหนดไว้สำหรับ ee.Number ดังนี้

โปรแกรมแก้ไขโค้ด (JavaScript)

// Use a built-in function to perform an operation on the number.
var logE = serverNumber.log();
print('log(e)=', logE);

ในตัวอย่างนี้ log() เป็นเมธอดสำหรับออบเจ็กต์ ee.Number (ใช้แท็บเอกสารทางด้านซ้ายของเครื่องมือแก้ไขโค้ดเพื่อดูรายการเมธอดทั้งหมดสำหรับออบเจ็กต์ Earth Engine ทุกประเภท เช่น ee.Number > log() โปรดทราบว่าเมธอดของออบเจ็กต์ Earth Engine จะแสดงผลออบเจ็กต์ Earth Engine อื่นๆ

รายการ

หากต้องการเปลี่ยนรายการ JavaScript เป็นออบเจ็กต์ ee.List ในเซิร์ฟเวอร์ คุณสามารถ ใส่สัญพจน์ JavaScript ลงในคอนเทนเนอร์ได้เช่นเดียวกับตัวเลขและสตริง นอกจากนี้ Earth Engine ยังมีเมธอดอำนวยความสะดวกฝั่งเซิร์ฟเวอร์สำหรับการสร้างลำดับตัวเลขด้วย เช่น

โปรแกรมแก้ไขโค้ด (JavaScript)

// Make a sequence the hard way.
var eeList = ee.List([1, 2, 3, 4, 5]);
// Make a sequence the easy way!
var sequence = ee.List.sequence(1, 5);
print('Sequence:', sequence);

เนื่องจากออบเจ็กต์ ee.List มีอยู่บนเซิร์ฟเวอร์เท่านั้น ให้ใช้ฟังก์ชันที่ Earth Engine มีให้เพื่อโต้ตอบกับออบเจ็กต์ เช่น หากต้องการนำบางอย่างออกจากรายการ ให้ใช้วิธี get() ของออบเจ็กต์ ee.List ดังนี้

โปรแกรมแก้ไขโค้ด (JavaScript)

// Use a method on an ee.List to extract a value.
var value = sequence.get(2);
print('Value at index 2:', value);

การแคสต์

บางครั้ง Earth Engine จะไม่ทราบประเภทของออบเจ็กต์ที่ส่งคืนจากเมธอด ในฐานะโปรแกรมเมอร์ คุณทราบว่าตัวแปร value ในตัวอย่างก่อนหน้าคือออบเจ็กต์ตัวเลข แต่หากพยายามใช้วิธี add() ของ ee.Number คุณจะได้รับข้อผิดพลาด เช่น

ซึ่งมักใช้กับฟังก์ชัน get() ซึ่งอาจแสดงผลออบเจ็กต์ Earth Engine ทุกประเภท หากต้องการแก้ไข ให้ใช้ตัวสร้าง ee.Number เพื่อ แคสต์ผลลัพธ์

โปรแกรมแก้ไขโค้ด (JavaScript)

// Cast the return value of get() to a number.
print('No error:', ee.Number(value).add(3));

พจนานุกรม

คุณสร้าง Dictionary ของ Earth Engine จากออบเจ็กต์ JavaScript ได้เช่นเดียวกับ สตริง ตัวเลข และลิสต์ ในระหว่างการสร้าง คุณสามารถใช้ฟังก์ชัน JavaScript เพื่อ เริ่มต้นออบเจ็กต์ Earth Engine ได้ ในกรณีนี้ ee.Dictionary จะสร้างขึ้นจากออบเจ็กต์ลิเทอรัล JavaScript โดยตรง ดังนี้

โปรแกรมแก้ไขโค้ด (JavaScript)

// Make a Dictionary on the server.
var dictionary = ee.Dictionary({
  e: Math.E,
  pi: Math.PI,
  phi: (1 + Math.sqrt(5)) / 2
});

// Get some values from the dictionary.
print('Euler:', dictionary.get('e'));
print('Pi:', dictionary.get('pi'));
print('Golden ratio:', dictionary.get('phi'));

// Get all the keys:
print('Keys: ', dictionary.keys());

ในตัวอย่างนี้ โปรดสังเกตว่าเมื่อมี ee.Dictionary แล้ว คุณต้องใช้วิธีการใน ee.Dictionary เพื่อรับค่า (ซึ่งต่างจากพจนานุกรม JavaScript ในบทเรียนก่อนหน้า) กล่าวคือ get(key) จะแสดงค่า ที่เชื่อมโยงกับ key เนื่องจากออบเจ็กต์ที่ get() แสดงผลอาจเป็นอะไรก็ได้ หากคุณจะทำอะไรกับออบเจ็กต์นอกเหนือจากการพิมพ์ คุณจะต้องแคสต์ออบเจ็กต์เป็นประเภทที่ถูกต้อง นอกจากนี้ โปรดทราบว่าkeys()เมธอด จะแสดงผล ee.List

วันที่

ออบเจ็กต์วันที่คือวิธีที่ Earth Engine แสดงเวลา เช่นเดียวกับตัวอย่างก่อนหน้า คุณต้องแยกความแตกต่างระหว่างออบเจ็กต์ JavaScript Date กับออบเจ็กต์ ee.Date ของ Earth Engine สร้าง ee.Date จากสตริง จาก Date JavaScript หรือใช้วิธีการแบบคงที่ที่คลาส ee.Date มีให้ (ดูรายละเอียดได้ที่ส่วนวันที่ในแท็บเอกสาร) ตัวอย่างนี้แสดงการสร้างวันที่จากสตริงหรือวันที่ JavaScript ซึ่งแสดงมิลลิวินาทีนับตั้งแต่เที่ยงคืนของวันที่ 1 มกราคม 1970

โปรแกรมแก้ไขโค้ด (JavaScript)

// Define a date in Earth Engine.
var date = ee.Date('2015-12-31');
print('Date:', date);

// Get the current time using the JavaScript Date.now() method.
var now = Date.now();
print('Milliseconds since January 1, 1970', now);

// Initialize an ee.Date object.
var eeNow = ee.Date(now);
print('Now:', eeNow);

วันที่มีประโยชน์สำหรับการกรองคอลเล็กชัน โดยเฉพาะอย่างยิ่งเป็นอาร์กิวเมนต์ของเมธอด filterDate() ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดเรียงคอลเล็กชันได้ที่ส่วนนี้ ของหน้าเริ่มต้นใช้งาน

นอกเรื่อง: การส่งพารามิเตอร์ตามชื่อ

คุณส่งอาร์กิวเมนต์ไปยังเมธอด Earth Engine ได้ตามลำดับ เช่น หากต้องการสร้าง ee.Date จากปี เดือน และวัน คุณสามารถส่งพารามิเตอร์ของเมธอดแบบคงที่ fromYMD() ตามลำดับปี เดือน วัน

โปรแกรมแก้ไขโค้ด (JavaScript)

var aDate = ee.Date.fromYMD(2017, 1, 13);
print('aDate:', aDate);

หรือจะส่งพารามิเตอร์ตามชื่อในลำดับใดก็ได้ แม้ว่าอาจเป็น โค้ด แต่ก็ช่วยปรับปรุงความสามารถในการอ่านและการนำกลับมาใช้ใหม่ได้ หากต้องการส่งพารามิเตอร์ตามชื่อ ให้ส่งออบเจ็กต์ JavaScript ซึ่งคีย์ของออบเจ็กต์คือชื่อของพารามิเตอร์เมธอด และค่าคืออาร์กิวเมนต์ของเมธอด เช่น

โปรแกรมแก้ไขโค้ด (JavaScript)

var theDate = ee.Date.fromYMD({
  day: 13,
  month: 1,
  year: 2017
});
print('theDate:', theDate);

โปรดทราบว่าชื่อของพร็อพเพอร์ตี้ออบเจ็กต์ (คีย์) ตรงกับชื่อที่ระบุไว้ในee.Date.fromYMD()เอกสาร นอกจากนี้ โปรดทราบว่า ออบเจ็กต์ที่ส่งเป็นอาร์กิวเมนต์สามารถบันทึกไว้ในตัวแปรเพื่อนำกลับมาใช้ใหม่ได้ ดังที่แสดงในตัวอย่างออบเจ็กต์ JavaScript

ตอนนี้คุณก็มีความรู้เบื้องต้นเกี่ยวกับ JavaScript มากพอที่จะเริ่มใช้ Earth Engine แล้ว ดูคำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับออบเจ็กต์ JavaScript เทียบกับออบเจ็กต์ Earth Engine ได้ที่หน้าไคลเอ็นต์เทียบกับเซิร์ฟเวอร์

ในส่วนถัดไป คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับแนวคิดการเขียนโปรแกรมเชิงฟังก์ชันเพื่อใช้ for-loop, เงื่อนไข if/else และการวนซ้ำใน Earth Engine ได้อย่างมีประสิทธิภาพ