ออบเจ็กต์ Earth Engine

เมื่อคุณคุ้นเคยกับ JavaScript แล้ว ให้ดูวิธีใส่ออบเจ็กต์ JavaScript และค่าพื้นฐานลงในคอนเทนเนอร์ 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() เพื่อสร้างออบเจ็กต์ตัวเลขบนเซิร์ฟเวอร์ เช่น ใช้เมธอด JavaScript Math.E เพื่อสร้างค่าคงที่บนเซิร์ฟเวอร์ ดังนี้

ตัวแก้ไขโค้ด (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 แสดงเวลา เช่นเดียวกับตัวอย่างก่อนหน้านี้ คุณควรแยกความแตกต่างระหว่างออบเจ็กต์ Date ของ JavaScript กับออบเจ็กต์ ee.Date ของ Earth Engine สร้าง ee.Date จากสตริง จาก JavaScript Date หรือใช้เมธอดแบบคงที่ที่คลาส 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, เงื่อนไข if/else และการทำซ้ำใน Earth Engine อย่างมีประสิทธิภาพ