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() 的第一個引數在用戶端上只是字串,但第二個引數實際上會傳送至伺服器進行評估,然後再傳回。

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.Numberadd() 方法,就會收到類似以下的錯誤訊息:

這在 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 條件和疊代。