Отложенное выполнение

В документе «Клиент и сервер» описывается, как объекты, на которые ссылается ваш скрипт, могут быть как на стороне клиента, так и на стороне сервера. Полный сценарий содержит не только объекты, которые вы хотите использовать, но и набор инструкций, которые сообщают Earth Engine, что с ними делать. В этом документе описывается, как эти инструкции отправляются в Google для обработки и как результаты отправляются обратно клиенту для отображения.

Когда вы пишете скрипт на Earth Engine (JavaScript или Python), этот код НЕ запускается непосредственно на серверах Earth Engine в Google. Вместо этого клиентская библиотека кодирует скрипт в набор объектов JSON , отправляет объекты в Google и ожидает ответа. Каждый объект представляет собой набор операций, необходимых для получения определенного результата, например изображения для отображения на клиенте. Рассмотрим следующий код:

Редактор кода (JavaScript)

var image = ee.Image('CGIAR/SRTM90_V4');
var operation = image.add(10);
print(operation.toString());
print(operation);

Настройка Python

См. страницу «Среда Python» для получения информации об API Python и использовании geemap для интерактивной разработки.

import ee
import geemap.core as geemap

Колаб (Питон)

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 и выведет ответ POST с серверов Google. Чтобы увидеть ответ во всей красе 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() на объекте сервера запускает запрос. Никакая обработка не выполняется на сервере до тех пор, пока результат не будет явно запрошен. Обратите внимание, что print() в редакторе кода JavaScript — это специальная клиентская функция, которая оборачивает асинхронный вызов getInfo() ; для Python мы вызываем его напрямую.

Другой пример запроса чего-либо — отображение этого в редакторе кода или элементе карты Geemap. Когда этот запрос отправляется в Google, возвращаются только плитки, необходимые для отображения результата в редакторе кода или элементе карты Geemap. В частности, положение карты и уровень масштабирования определяют, какие данные будут обработаны и преобразованы в изображения, которые можно отобразить на карте. При панорамировании или масштабировании обратите внимание, что другие плитки вычисляются лениво. Эта система по требованию обеспечивает распараллеливание и эффективную обработку, а также означает, что изображение, отображаемое на карте, создается из разных входных данных в зависимости от уровня масштабирования и местоположения границ карты. Узнайте больше о том, как определяются входные данные для вычислений, из запроса в документе Scale .