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 物件的方法。(使用程式碼編輯器左側的「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 條件和疊代。