В документе «Клиент и сервер» описывается, как объекты, на которые ссылается ваш скрипт, могут быть как на стороне клиента, так и на стороне сервера. Полный сценарий содержит не только объекты, которые вы хотите использовать, но и набор инструкций, которые сообщают 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);
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 .