現在您已熟悉 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()
的第一個引數在用戶端上只是字串,但第二個引數實際上會傳送至伺服器進行評估,然後再傳回。
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 方法處理該物件。在本例中,您無法使用 JavaScript 的 Math.log()
處理該 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 提供的函式與這些物件互動。舉例來說,如要從清單中取得項目,請使用 ee.List
物件的 get()
方法:
程式碼編輯器 (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
變數是數字物件。但如果您嘗試使用 ee.Number
的 add()
方法,就會收到類似以下的錯誤訊息:
這在 get()
函式中很常見,因為該函式可能會傳回各種 Earth Engine 物件。如要修正這個問題,請使用 ee.Number
建構函式轉換結果:
程式碼編輯器 (JavaScript)
// Cast the return value of get() to a number. print('No error:', ee.Number(value).add(3));
字典
您可以從 JavaScript 物件建構 Earth Engine Dictionary
,就像處理字串、數字和清單一樣。在建構期間,您可以使用 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
和 Earth Engine ee.Date
物件。從字串、JavaScript Date
建構 ee.Date
,或使用 ee.Date
類別提供的靜態方法。(詳情請參閱「文件」分頁中的「日期」一節)。這個範例說明如何從字串或 JavaScript 日期建構日期,該日期代表自 1970 年 1 月 1 日午夜起經過的毫秒數:
程式碼編輯器 (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 物件,請參閱「用戶端與伺服器」頁面。
在下一節中,您將進一步瞭解函式程式設計概念,以便在 Earth Engine 中有效使用 for 迴圈、if/else 條件和疊代。