現在您已熟悉 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 物件的方法。(使用程式碼編輯器左側的「Docs」分頁,查看每個 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 條件和疊代。