Установка Python – блокнот Colab

Earth Engine Python API можно развернуть в блокноте Google Colaboratory. Блокноты Colab – это блокноты Jupyter, которые работают в облаке и тесно интегрированы с Google Диском, что упрощает их настройку, доступ к ним и обмен ими. Если вы не знакомы с Google Colab или блокнотами Jupyter, рекомендуем изучить приветственный сайт Colab.

В следующих разделах описывается, как развернуть Earth Engine в Google Colab и визуализировать карты и диаграммы с помощью сторонних пакетов Python.

Как открыть блокнот Colab

Блокноты можно открывать как на Google Диске, так и в интерфейсе Colaboratory.

Новый блокнот

Google Диск

Откройте Google Диск и создайте файл.

  • Создать > Ещё > Colaboratory
  • Нажмите правой кнопкой мыши на папку и выберите в контекстном меню Ещё > Colaboratory.

Интерфейс Colab

Перейдите на сайт Colab и создайте новый файл.

  • File (Файл) > New (Создать) > New Python 3 notebook (Новый блокнот Python 3).
  • Если вы уже работали с Colab, то при переходе по ссылке выше откроется проводник, в котором можно создать новый файл, используя раскрывающееся меню внизу окна.

Существующий блокнот

Существующие файлы блокнотов (с расширением .ipynb) можно открывать на Google Диске и в интерфейсе Colab.

Google Диск

Блокноты Colab могут находиться в разных папках на Google Диске в зависимости от того, где они были созданы. Блокноты, созданные на Google Диске, будут находиться в папке, в которой они были созданы или в которую были перемещены. Блокноты Colab, созданные в интерфейсе Colab, по умолчанию сохраняются в папке Colab Notebooks, которая автоматически добавляется в раздел "Мой диск" на Google Диске, когда вы начинаете работать с Colab.

Файлы Colab можно определить по желтому символу CO и расширению .ipynb. Чтобы открыть файл, дважды нажмите на него и выберите Открыть с помощью > Colaboratory в верхней части страницы или нажмите на файл правой кнопкой мыши и выберите Открыть с помощью > Colaboratory в контекстном меню.

Интерфейс Colab

Открывая блокноты в интерфейсе Colab, вы получаете доступ к существующим файлам на Google Диске, GitHub и локальном оборудовании. При последующих посещениях интерфейса Colab будет появляться модальное окно проводника файлов. На вкладках в верхней части проводника выберите источник и перейдите к файлу .ipynb, который хотите открыть. Проводник также можно открыть из интерфейса Colab, выбрав Файл > Открыть блокнот или нажав Ctrl + O.

Импорт API и получение учетных данных

В этом разделе показано, как импортировать Earth Engine Python API и аутентифицировать доступ. Этот контент также доступен в виде блокнота Colab:

Earth Engine API по умолчанию включен в Google Colaboratory, поэтому требуется только импорт и аутентификация. Эти действия необходимо выполнять для каждого нового сеанса Colab, а также при перезапуске ядра Colab или утилизации виртуальной машины Colab из-за бездействия.

Импорт API

Чтобы импортировать API в сеанс, запустите следующую ячейку.

import ee

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

Запустите функцию ee.Authenticate, чтобы выполнить аутентификацию доступа к серверам Earth Engine, и ee.Initialize, чтобы инициализировать его. Добавьте ячейку кода, введите следующие строки, измените проект и запустите ячейку.

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

Вам будет предложено разрешить доступ к аккаунту Earth Engine. Чтобы выполнить этот шаг, следуйте инструкциям, напечатанным в ячейке.

Тестирование API

Протестируйте API, выведя на экран высоту горы Эверест. Обратите внимание, что перед использованием API его необходимо инициализировать. Запустите следующий скрипт Python в новой ячейке.

# Print the elevation of Mount Everest.
dem = ee.Image('NASA/NASADEM_HGT/001')
xy = ee.Geometry.Point([86.9250, 27.9881])
elev = dem.sample(xy, 30).first().get('elevation').getInfo()
print('Mount Everest elevation (m):', elev)

Визуализация на карте

Объекты ee.Image можно отображать в выходных ячейках блокнота. В двух примерах ниже показано, как отобразить статическое изображение и интерактивную карту.

Статическое изображение

Модуль IPython.display содержит функцию Image, которая может отображать результаты URL, представляющего изображение, сгенерированное в результате вызова функции Earth Engine getThumbUrl. Следующий скрипт отобразит значок глобальной модели рельефа.

# Import libraries.
import ee
from IPython.display import Image

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

# Import a DEM and display a thumbnail of it.
dem = ee.Image('NASA/NASADEM_HGT/001').select('elevation')
Image(url=dem.updateMask(dem.gt(0))
  .getThumbUrl({'min': 0, 'max': 4000, 'dimensions': 512,
                'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']}))

Интерактивная карта

Пакет folium можно использовать для отображения объектов ee.Image на интерактивной карте Leaflet. В Folium нет метода по умолчанию для обработки тайлов из Earth Engine, поэтому перед использованием его необходимо определить и добавить в модуль folium.Map.

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

# Import libraries.
import ee
import folium

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize(project='my-project')

# Define a method for displaying Earth Engine image tiles to folium map.
def add_ee_layer(self, ee_image_object, vis_params, name):
  map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)
  folium.raster_layers.TileLayer(
    tiles = map_id_dict['tile_fetcher'].url_format,
    attr = "Map Data © Google Earth Engine",
    name = name,
    overlay = True,
    control = True
  ).add_to(self)

# Add EE drawing method to folium.
folium.Map.add_ee_layer = add_ee_layer

# Fetch an elevation model.
dem = ee.Image('NASA/NASADEM_HGT/001').select('elevation')
# Set visualization parameters.
vis_params = {
  'min': 0,
  'max': 4000,
  'palette': ['006633', 'E5FFCC', '662A00', 'D8D8D8', 'F5F5F5']}

# Create a folium map object.
my_map = folium.Map(location=[20, 0], zoom_start=3)

# Add the elevation model to the map object.
my_map.add_ee_layer(dem.updateMask(dem.gt(0)), vis_params, 'DEM')

# Add a layer control panel to the map.
my_map.add_child(folium.LayerControl())

# Display the map.
display(my_map)

Визуализация в виде диаграммы

Некоторые функции Earth Engine создают табличные данные, которые можно отобразить с помощью пакетов визуализации данных, таких как matplotlib. В следующем примере показано, как отобразить табличные данные из Earth Engine в виде точечной диаграммы. Подробнее о создании диаграмм в Colaboratory…

# Import libraries.
import ee
import matplotlib.pyplot as plt

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the Earth Engine module.
ee.Initialize(project='my-project')

# Fetch a Landsat TOA image.
img = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_034033_20000913')

# Select Red and NIR bands, scale them, and sample 500 points.
samp_fc = img.select(['B3','B4']).sample(scale=30, numPixels=500)

# Arrange the sample as a list of lists.
samp_dict = samp_fc.reduceColumns(ee.Reducer.toList().repeat(2), ['B3', 'B4'])
samp_list = ee.List(samp_dict.get('list'))

# Save server-side ee.List as a client-side Python list.
samp_data = samp_list.getInfo()

# Display a scatter plot of Red-NIR sample pairs using matplotlib.
plt.scatter(samp_data[0], samp_data[1], alpha=0.2)
plt.xlabel('Red', fontsize=12)
plt.ylabel('NIR', fontsize=12)
plt.show()