Установка Python

Поддержка Python

Клиентская библиотека Python Earth Engine совместима с версиями Python, поддерживаемыми Google Cloud . Поддержка обновляется ежегодно в соответствии с графиком выпуска Python ( PEP 602 ; Статус версий Python ). Использование неподдерживаемых версий Python может привести к сбоям аутентификации, неожиданному поведению или сбою определенных операций.

Варианты установки

Если вы используете Google Colab , последняя версия клиентской библиотеки Python Earth Engine уже установлена ​​(через pip). Попробуйте следующий блокнот, чтобы начать работу с Earth Engine и Colab:

Если вы не используете Colab, клиентскую библиотеку Earth Engine можно установить и обновить в вашей системе вручную с помощью conda (рекомендуется) или pip :


Установите API в произвольную среду Python с помощью pip . Из терминала или командной строки:

pip install earthengine-api

После установки вы можете импортировать, аутентифицировать и инициализировать API Earth Engine, как описано здесь .

Обновите API:

pip install earthengine-api --upgrade

Импорт пакетов

Пакет Python API называется ee . Его необходимо импортировать и инициализировать для каждого нового сеанса Python и сценария:

import ee

Аутентификация и инициализация

Прежде чем использовать клиентскую библиотеку Python Earth Engine, вам необходимо пройти аутентификацию и использовать полученные учетные данные для инициализации клиента Python. Бегать:

ee.Authenticate()

При этом будет выбран лучший режим аутентификации для вашей среды и предложено подтвердить доступ для ваших сценариев. Для инициализации вам необходимо предоставить проект, которым вы владеете или у вас есть разрешения на использование. Этот проект будет использоваться для выполнения всех операций Earth Engine:

ee.Initialize(project='my-project')

См. руководство по аутентификации для устранения неполадок и получения дополнительной информации о режимах аутентификации и облачных проектах.

Привет, мир!

Вот короткий сценарий, позволяющий проверить, все ли у вас готово для работы с Earth Engine.

import ee
ee.Authenticate()
ee.Initialize(project='my-project')
print(ee.String('Hello from the Earth Engine servers!').getInfo())

Синтаксис

API-интерфейсы Python и JavaScript имеют доступ к одним и тем же функциям на стороне сервера, но выражения на стороне клиента ( подробнее о клиенте и сервере ) могут различаться из-за различий в синтаксисе языка. В следующей таблице приведен список общих синтаксических различий, с которыми вы можете столкнуться при работе с API Python по сравнению с API JavaScript.

Общие синтаксические различия между JavaScript и Python
Свойство JavaScript Питон
Определение функции
function myFun(arg) {
  return arg;
}

var myFun = function(arg) {
  return arg;
};
def my_fun(arg):
  return arg
Анонимное отображение функций
var foo = col.map(function(arg) {
  return arg;
});
foo = col.map(lambda arg: arg)
Определение переменной
var myVar = 'var';
my_var = 'var'
Логические операторы
var match = such.and(that);
var match = such.or(that);
var match = such.not(that);
match = such.And(that)
match = such.Or(that)
match = such.Not(that)
Многострочная цепочка методов
var foo = my.really()
              .reallyLong()
              .methodChain();
foo = (my.really()
       .reallyLong()
       .methodChain())
Ключи словаря
var dic = {'key': value};
var dic = {key: value};
dic = {'key': value}
Доступ к объекту словаря
var value = dic.key;
var value = dic['key'];
value = dic['key']
Определение аргумента функции
// Positional arguments.
var foo = fun(argX, argY, argZ);
// Keyword arguments object.
var foo = fun({y: argY});
# Positional arguments.
foo = fun(arg_x, arg_y, arg_z)
# Keyword arguments dictionary.
foo = fun(**{'y': arg_y})
# Keyword arguments.
foo = fun(x=arg_x, z=arg_z)
логическое значение
var t = true;
var f = false;
t = True
f = False
Нулевые значения
var na = null;
na = None
Комментарий
//
#

Объекты даты

Определяйте объекты даты на стороне клиента и манипулируйте ими с помощью модуля datetime . Включите модуль в свой скрипт:

import datetime

Преобразуйте ee.Date в дату на стороне клиента:

ee_date = ee.Date('2020-01-01')
py_date = datetime.datetime.utcfromtimestamp(ee_date.getInfo()['value']/1000.0)

Преобразуйте дату на стороне клиента в ee.Date:

py_date = datetime.datetime.utcnow()
ee_date = ee.Date(py_date)

Экспорт данных

Для экспорта данных с помощью API Python требуется использование модуля ee.batch , который предоставляет интерфейс для функций Export . Передавайте аргументы параметров так же, как и в API JavaScript, учитывая различия, отмеченные в таблице синтаксиса выше. Задачи экспорта необходимо запускать путем вызова метода start() для определенной задачи. Запросите статус задачи, вызвав для нее метод status() . В следующем примере демонстрируется экспорт объекта ee.Image .

Создайте задачу экспорта:

task = ee.batch.Export.image.toDrive(image=my_image,  # an ee.Image object.
                                     region=my_geometry,  # an ee.Geometry object.
                                     description='mock_export',
                                     folder='gdrive_folder',
                                     fileNamePrefix='mock_export',
                                     scale=1000,
                                     crs='EPSG:4326')

Запустите задачу экспорта:

task.start()

Проверьте статус задачи экспорта:

task.status()

Результатом task.status() является словарь, содержащий такую ​​информацию, как состояние задачи и ее идентификатор.

{
  'state': 'READY',
  'description': 'my_export_task',
  'creation_timestamp_ms': 1647567508236,
  'update_timestamp_ms': 1647567508236,
  'start_timestamp_ms': 0,
  'task_type': 'EXPORT_IMAGE',
  'id': '56TVJIZABUMTD5CJ5YHTMYK4',
  'name': 'projects/earthengine-legacy/operations/56TVJIZABUMTX5CJ5HHTMYK4'
}

Вы можете отслеживать ход выполнения задачи, используя поле state . См. страницу «Среды обработки» для получения списка значений state и дополнительной информации о жизненном цикле задачи .

Печать объектов

При печати объекта Earth Engine в Python печатается сериализованный запрос объекта, а не сам объект. Обратитесь к странице «Клиент против сервера», чтобы понять причину этого.

Вызовите getInfo() для объектов Earth Engine, чтобы передать желаемый объект с сервера клиенту:

# Load a Landsat image.
img = ee.Image('LANDSAT/LT05/C02/T1_L2/LT05_034033_20000913')

# Print image object WITHOUT call to getInfo(); prints serialized request instructions.
print(img)

# Print image object WITH call to getInfo(); prints image metadata.
print(img.getInfo())
Обратите внимание, что getInfo() — это синхронная операция, то есть выполнение выражений, следующих за вызовом getInfo() блокируется до тех пор, пока результат не будет возвращен клиенту. Кроме того, запросы большого количества данных или дорогостоящих вычислений могут возвращать ошибку и/или зависать. В общем, лучше всего экспортировать результаты и после завершения импортировать их в новый скрипт для дальнейшего анализа.

Объекты пользовательского интерфейса

Модуль ui Earth Engine доступен только через редактор кода API JavaScript. Используйте сторонние библиотеки для элементов пользовательского интерфейса в Python. Такие библиотеки, как geemap , Folium и ipyleaflet, обеспечивают интерактивное отображение карт, а построение диаграмм можно выполнить с помощью Matplotlib , Altair или seaborn , и это лишь некоторые из них. См. примеры в блокноте настройки Earth Engine в Colab для использования geemap и Matplotlib.

Python в руководстве разработчика

Код Python включен в Руководство разработчика Earth Engine. Примеры кода, если они доступны, можно просмотреть, щелкнув вкладку «Colab (Python)» в верхней части блоков кода. Страницы руководства также могут включать кнопки вверху для запуска страницы в виде блокнота Colab или просмотра на GitHub. Примеры кода Python предназначены для запуска с помощью Google Colab . Интерактивная карта и исследование объектов обрабатываются библиотекой geemap . Клиентская библиотека Python Earth Engine и geemap предустановлены в Colab.

Настройка Earth Engine

Для запуска кода Python необходимо импортировать библиотеку Earth Engine, выполнить аутентификацию и инициализацию. В примерах используются следующие команды (альтернативные варианты см. на странице «Аутентификация и инициализация »).

import ee
ee.Authenticate()
ee.Initialize(project='my-project')

Интерактивное исследование с помощью geemap

Библиотека geemap используется для отображения фрагментов карты и печати расширенных представлений объектов Earth Engine. Эти функции библиотеки зависят соответственно от ipyleaflet и eerepr . Библиотека geemap и ее зависимости предустановлены в Google Colab; импортируйте его в каждый сеанс.

import geemap.core as geemap

Классы данных Geographic Earth Engine, такие как ee.Image и ee.FeatureCollection , можно просмотреть с помощью объекта geemap.Map . Сначала определите объект карты. Затем добавьте к нему слои или измените его область просмотра.

# Initialize a map object.
m = geemap.Map()

# Define an example image.
img = ee.Image.random()

# Add the image to the map.
m.add_layer(img, None, 'Random image')

# Display the map (you can call the object directly if it is the final line).
display(m)