เมื่อคุ้นเคยกับ 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 ได้อย่างมีประสิทธิภาพ