「用戶端與伺服器」文件說明如何在指向用戶端或伺服器端的程式碼中引用物件。完整的指令碼不僅包含您要使用的物件,還包含一組指示,告訴 Earth Engine 如何處理這些物件。本文件說明如何將這些指示傳送至 Google 進行處理,以及如何將結果傳回用戶端進行顯示。
在 Earth Engine 中編寫指令碼 (JavaScript 或 Python) 時,該程式碼並不會直接在 Google 的 Earth Engine 伺服器上執行。相反地,用戶端程式庫會將指令碼編碼為一組 JSON 物件,將物件傳送至 Google,然後等待回應。每個物件都代表一組作業,這些作業是取得特定輸出內容 (例如在用戶端顯示的圖片) 所需的作業。請考慮使用以下程式碼:
程式碼編輯器 (JavaScript)
var image = ee.Image('CGIAR/SRTM90_V4'); var operation = image.add(10); print(operation.toString()); print(operation);
import ee import geemap.core as geemap
Colab (Python)
image = ee.Image('CGIAR/SRTM90_V4') operation = image.add(10) print(operation) print(operation.getInfo())
第一個列印陳述式會輸出 JSON 結構,用戶端程式庫會使用該結構向 Google 伺服器描述該圖片:
ee.Image({ "type": "Invocation", "arguments": { "image1": { "type": "Invocation", "arguments": { "id": "CGIAR/SRTM90_V4" }, "functionName": "Image.load" }, "image2": { "type": "Invocation", "arguments": { "value": 10 }, "functionName": "Image.constant" } }, "functionName": "Image.add" })
第二個列印陳述式會將要求傳送給 Google,並輸出 Google 伺服器的 POST 回應。如要查看完整的 JSON 回應,請點選主控台右側印出物件旁的 JSON
連結:
{ "type": "Image", "bands": [ { "id": "elevation", "data_type": { "type": "PixelType", "precision": "int", "min": -32758, "max": 32777 }, "crs": "EPSG:4326", "crs_transform": [ 0.0008333333535119891, 0, -180, 0, -0.0008333333535119891, 60 ] } ] }
除非有相關要求,否則系統不會將任何內容傳送給 Google 處理。在這個範例中,在伺服器物件上列印 getInfo()
呼叫的結果會觸發要求。在明確要求結果之前,伺服器不會進行任何處理。請注意,JavaScript 程式碼編輯器中的 print()
是用來包裝非同步 getInfo()
呼叫的特殊用戶端函式;對於 Python,我們會直接呼叫該函式。
另一個要求範例是將要求顯示在程式碼編輯器或 geemap 地圖元素上。當這項要求傳送至 Google 時,系統只會傳回在 Code Editor 或 geemap 地圖元素中顯示結果所需的圖塊。具體來說,地圖的位置和縮放等級會決定哪些資料會經過處理,並轉換為可在地圖上顯示的圖片。請注意,如果您拖曳或縮放,其他圖塊會以延遲方式計算。這套按需系統可進行平行處理,並且能有效處理,但這也表示地圖上顯示的圖片會根據縮放等級和地圖邊界的位置,從不同的輸入內容產生。如要進一步瞭解如何根據要求決定運算的輸入內容,請參閱 Scale 文件。