Облачные ресурсы Earth Engine с поддержкой GeoTiff

Earth Engine поддерживает ресурсы, созданные на основе оптимизированных для облака файлов GeoTIFF (COG). Преимуществом ресурсов на основе COG является то, что пространственные поля и метаданные изображения индексируются во время создания ресурса, что повышает производительность изображений в коллекциях. Производительность ресурсов на основе COG сопоставима с производительностью ресурсов, загруженных извне, в типичных сценариях использования.

Обратите внимание, что один актив может быть обеспечен несколькими точками опоры (например, на каждый пояс может приходиться одна точка опоры). Однако использование множества точек опоры для одного пояса не поддерживается.

(В качестве альтернативы, Earth Engine может напрямую загружать изображения из файлов COG в Google Cloud Storage ( подробнее ). Однако для изображения, загруженного через ee.Image.loadGeoTIFF и добавленного в коллекцию изображений, потребуется чтение файла GeoTiff для операций фильтрации коллекции.)

Для создания актива, обеспеченного себестоимостью реализованной продукции,

  1. Разместите ваши COG-файлы в хранилище GCS (см. раздел «Местоположение» для получения информации о разрешенных регионах).
  2. Напишите манифест для загрузки изображений.
  3. Используйте утилиту командной строки earthengine для отправки команды загрузки:
earthengine upload external_image --manifest my_manifest.json

Пример манифеста изображения с одним Tileset

Простейший ImageManifest содержит один Tileset . Если полосы не указаны, результирующий ресурс будет содержать все полосы GeoTIFF с названиями полос, закодированными в GeoTIFF (в данном случае, "vis-red", "vis-green" и "vis-blue").

request = {
  'imageManifest': {
    'name': f'projects/{ee_project}/assets/cogdemo1',
    'tilesets': [
      { 'id': '0', 'sources': [ { 'uris': [
        'gs://ee-docs-demos/COG_demo.tif'] } ] }
    ],
    'properties': {
      'version': '1.1'
    },
    'startTime': '2016-01-01T00:00:00.000000000Z',
    'endTime': '2016-12-31T15:01:23.000000000Z',
  },
}

pprint(request)

Более одного Tileset

Можно указать ImageManifest с несколькими наборами Tileset , где каждый канал результирующего ресурса поддерживается одним из каналов набора Tileset используя поля tilesetId и tilesetBandIndex . Это полезно в случае, когда разные каналы имеют разное разрешение или типы данных. Каналы могут быть перечислены в любом порядке из любого доступного Tileset . В следующем примере:

  • Файл "b4b3b2.tif" имеет масштаб 10 м, а "b5b6b7" — масштаб 20 м.
  • Порядок полос результирующего актива формируется путем смешивания входных центров тяжести (например, выходная полоса 0 взята из Tileset 0, а выходная полоса 1 — из Tileset 1).
request = {
  'imageManifest': {
    'name': f'projects/{ee_project}/assets/cogdemo2',
    'uriPrefix': 'gs://ee-docs-demos/external_image_demo/',
    'tilesets': [
      { 'id': '0', 'sources': [ { 'uris': ['b4b3b2.tif'] } ] },
      { 'id': '1', 'sources': [ { 'uris': ['b5b6b7.tif'] } ] },
    ],
    'bands': [
      { 'id': 'red', 'tilesetId': '0', 'tilesetBandIndex': 0 },
      { 'id': 'rededge3', 'tilesetId': '1', 'tilesetBandIndex': 2 },
      { 'id': 'rededge2', 'tilesetId': '1', 'tilesetBandIndex': 1 },
      { 'id': 'green', 'tilesetId': '0', 'tilesetBandIndex': 1 },
      { 'id': 'blue', 'tilesetId': '1', 'tilesetBandIndex': 0 },
      { 'id': 'rededge1', 'tilesetId': '0', 'tilesetBandIndex': 2 },
    ],
  },
}

pprint(request)

Подробная информация об активах, обеспеченных COG.

Расположение

Местоположение сегмента Cloud Storage должно быть одним из следующих:

  • Многорегиональная сеть США
  • Любой двойной регион США, включающий US-CENTRAL1
  • регион US-CENTRAL1

Класс хранения

Класс хранения контейнера должен быть «Стандартное хранение».

Разрешения на обмен информацией

Списки контроля доступа (ACL) для ресурсов Earth Engine, поддерживаемых COG, и базовых данных управляются отдельно. При предоставлении доступа к ресурсам, поддерживаемым COG, для чтения сотрудникам, ответственность за обеспечение доступа на чтение как к самому ресурсу Earth Engine, так и к базовым файлам COG лежит на владельце.

1. Предоставьте хранилищу Google Cloud Storage права на чтение.

Для того чтобы участники проекта могли читать ресурсы, хранящиеся в COG, им сначала необходимо получить доступ на чтение к базовым файлам COG в хранилище Google Cloud Storage. Без этих разрешений Earth Engine не сможет получить для них данные. Если данные в Google Cloud Storage недоступны пользователю Earth Engine, Earth Engine вернет ошибку вида "Не удалось загрузить GeoTIFF по адресу gs://my-bucket/my-object#123456 " (где 123456 — это номер поколения объекта).

В частности, участники проекта должны обладать следующими правами доступа:

  • Используйте метод storage.buckets.get для доступа к хранилищу (чтобы получить метаданные и местоположение хранилища, позволяя Earth Engine корректно определить источник ресурса).
  • Используйте storage.objects.get для доступа к хранилищу (чтобы прочитать фактические данные об активах, обеспеченных COG).

Эти разрешения предоставляются, среди прочих , ролями "Читатель устаревших сегментов хранилища" и "Читатель устаревших объектов хранилища" .

Чтобы назначить эти роли сотрудникам:

  1. Перейдите на страницу разрешений хранилища: https://console.cloud.google.com/storage/browser/{MY-BUCKET};tab=permissions
  2. Нажмите « ПРЕДОСТАВИТЬ ДОСТУП »
  3. Добавьте всех субъектов (например, пользователей, группы, учетные записи служб), которым следует предоставить доступ на чтение.
  4. Назначьте следующие роли:
    • "Средство чтения устаревших сегментов хранилища" (предоставляет права на чтение на уровне сегментов хранилища, включая storage.buckets.get ).
    • "Средство чтения устаревших объектов хранилища" (предоставляет storage.objects.get ).
    • (В качестве альтернативы вы можете создать новую пользовательскую роль только с разрешениями storage.buckets.get и storage.objects.get и назначить её.)
  5. Сохранять

2. Поделитесь файлом Earth Engine для ознакомления.

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

Поколения

При создании ресурса, поддерживаемого COG, Earth Engine считывает метаданные TIFF-файлов, указанных в манифесте, и создает запись в хранилище ресурсов. Каждый URI, связанный с этой записью, может иметь поколение. Подробности о поколениях см. в документации по версионированию объектов . Если поколение указано, например gs://foo/bar#123 , Earth Engine сохранит этот URI без изменений. Если поколение не указано, Earth Engine сохранит этот URI вместе с поколением TIFF-файла на момент вызова ImportExternalImage .

Это означает, что если какой-либо TIFF-файл, содержащий внешний ресурс в GCS, обновляется (тем самым изменяя его генерацию), Earth Engine вернет ошибку "Не удалось загрузить GeoTIFF по адресу gs://my-bucket/my-object#123456 ", поскольку ожидаемый объект больше не существует (если только в корзине не включено несколько версий объектов). Эта политика предназначена для синхронизации метаданных ресурса с метаданными объекта.

Конфигурация

Что касается конфигурации COG, то TIFF ДОЛЖЕН соответствовать следующим требованиям:

  • Плиточная облицовка, размеры которой могут быть следующими:

    • 256x256
    • 512x512
    • 1024x1024
    • 2048x2048
  • Расположение элементов такое, что все IFD находятся в начале.

Для достижения наилучших результатов:

  • Используйте плитку размером 512x512 или больше.
  • Включите обзоры, основанные на принципе «степени двойки».

В зависимости от предполагаемых сценариев использования, параметр создания «INTERLEAVE» может повлиять на производительность. Мы рекомендуем использовать чередование полос (BAND) во всех случаях.

Более подробную информацию об оптимизированной конфигурации см. на этой странице .

Следующая команда gdal_translate преобразует растровое изображение в формат GeoTIFF с чередованием полос, сжатый по стандарту zstd и оптимизированный для облачных вычислений, который будет хорошо работать в Earth Engine:

gdal_translate in.tif out.tif \
  -co COPY_SRC_OVERVIEWS=YES \
  -co TILED=YES \
  -co BLOCKXSIZE=512 \
  -co BLOCKYSIZE=512 \
  -co COMPRESS=ZSTD \
  -co ZSTD_LEVEL=22 \
  -co INTERLEAVE=BAND \
  -co NUM_THREADS=ALL_CPUS

Возможно, размер выходного файла можно дополнительно уменьшить, указав предиктор ( -co PREDICTOR=2 для целочисленных типов данных и -co PREDICTOR=3 для типов данных с плавающей запятой).

Для пользователей с GDAL >= 3.11 драйвер COG может создавать файлы без необходимости беспокоиться о создании и сохранении обзоров.

gdal_translate in.tif out.tif \
  -of COG \
  -co OVERVIEWS=IGNORE_EXISTING \
  -co COMPRESS=ZSTD \
  -co LEVEL=22 \
  -co PREDICTOR=2 \
  -co INTERLEAVE=BAND \
  -co NUM_THREADS=ALL_CPUS \

Создание облачных ресурсов на основе GeoTiff с использованием REST API

Примечание: REST API содержит новые и расширенные функции, которые могут быть не подходящими для всех пользователей. Если вы новичок в Earth Engine, мы рекомендуем начать с руководства по JavaScript .

Для создания ресурса, поддерживаемого COG, с помощью REST API, отправьте POST запрос к конечной точке Earth Engine ImportExternalImage . Как показано ниже, этот запрос должен быть авторизован для создания ресурса в вашей пользовательской папке.

Начать авторизованную сессию

Чтобы создать ресурс Earth Engine в своей пользовательской папке, вам необходимо пройти аутентификацию под своим именем при отправке запроса. Вы можете использовать учетные данные из аутентификатора Earth Engine для запуска AuthorizedSession . Затем вы можете использовать AuthorizedSession для отправки запросов в Earth Engine.

import ee
import json
from pprint import pprint
from google.auth.transport.requests import AuthorizedSession

ee.Authenticate()  #  or !earthengine authenticate --auth_mode=gcloud

# Specify the cloud project you want associated with Earth Engine requests.
ee_project = 'your-project'

session = AuthorizedSession(
    ee.data.get_persistent_credentials().with_quota_project(ee_project)
)

Текст запроса

Тело запроса представляет собой экземпляр ImageManifest . Здесь указывается путь к COG, а также другие полезные свойства.

Подробности о настройке ImageManifest см. в этом руководстве . Можно определить один или несколько Tileset , каждый из которых будет поддерживать один или несколько каналов. Для ImportExternalImage поддерживается не более одного ImageSource на каждый Tileset .

Подробную информацию об экспорте себестоимости проданных товаров см. в этом документе .

Отправить запрос

Отправьте POST-запрос к конечной точке Earth Engine projects.images.importExternal .

url = f'https://earthengine.googleapis.com/v1alpha/projects/{ee_project}/image:importExternal'

response = session.post(
  url = url,
  data = json.dumps(request)
)

pprint(json.loads(response.content))