Русский
Русский
English
Статистика
Реклама

Google Earth Engine (GEE) как общедоступный каталог больших геоданных

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



На скриншоте Python Jupyter ноутбук, где растр с данными о плотности населения за 2020 год из каталога Earth Engine data Catalog: WorldPop Global Project Population Data отображен на карте OpenStreetMap


Введение


Как говорится, аппетит приходит во время еды. Вот и я, хотя давно и с удовольствием работаю с Google Earth Engine (GEE), только недавно столкнулся с задачами, требующими регулярного извлечения терабайт данных для их последующей обработки. К счастью, это вполне реально. Более того, на GEE все нужные данные представлены в одном месте и регулярно обновляются, что делает его оптимальным источником. Конечно, мне понятно, насколько мало специалистов работают с такими наборами пространственной информации, и уж точно они не ищут статьи на русском языке (потому, что их нет). С другой стороны, специалисты по машинному обучению (ML) часто жалуются на недостаток данных, так вот же вам настоящий Клондайк! Есть разные варианты, как реализовать машинное обучение на этих данных можно средствами GEE, можно обратиться к функциям Compute Engine или делать все самому. Впрочем, это отдельная большая тема, так что мы ограничимся лишь получением данных.


Облачные акаунты Google


Для работы нам понадобится подключение к облачным аккаунтам Google Cloud SDK и установленный консольный google-cloud-sdk. При наличии гугл почты у нас уже есть один (или несколько) персональных аккаунтов. Просмотреть список доступных аккаунтов и переключаться между ними можно с помощью консольной команды:


$ gcloud auth listCredentialed accounts: - youremail@gmail.com (active)To set the active account, run $ gcloud config set account <account>

Здесь уже отображена подсказка для переключения между аккаунтами:


$ gcloud config set account <account>

После переключения нужно авторизоваться в аккаунте :


$ gcloud auth login

Доступ к облачным хранилищам


Обычных почтовых аккаунтов достаточно для доступа к облачным хранилищам buckets и Google Drive, куда можно сохранять данные GEE из облачного редактора GEE. Заметим, что при доступе через API данные возможно сохранить сразу локально.


Cохранение данных GEE на buckets выполняется с помощью функций Export.table.toCloudStorage и Export.image.toCloudStorage и используется в случаях, когда планируется дальнейшая работа с файлами в облаке Google Compute Engine. Управлять этими файлами можно с помощью утилиты gsutil, например:


$ gsutil du -h gs://gcp-pdp-osm-dev-earth-engine

Эта команда покажет список файлов и их размеры в удобных человеку единицах (см. ключ -h). С помощью утилиты gsutil можно осуществлять различные файловые операции, ключи достаточно интуитивны (cp, rm,...), подробности смотрите в справке указанной утилиты.


Для сохранения из GEE на Google Drive доступны команды Export.table.toDrive и Export.image.toDrive, дальнейшее управление файлами доступно в веб-интерфейсе или с помощью дополнительных утилит и приложений. Преимущественно сохранение на Google Drive используется для скачивания готовых файлов.


Доступ к GEE через API


Для не интерактивной работы с Google Earth Engine (GEE) рекомендуется создать так называемый сервисный аккаунт вида my-service-account@...iam.gserviceaccount.com: Create and register a service account to use Earth Engine. Для доступа к GEE требуется в свойствах созданного аккаунта зайти на вкладку KEYS и создать и скачать JSON файл его ключа, а также зарегистрировать аккаунт на странице Register a new service account. Теперь с этим ключом можно авторизоваться с помощью следующего Python кода:


import eeservice_account = 'my-service-account@...iam.gserviceaccount.com'credentials = ee.ServiceAccountCredentials(service_account, 'privatekey.json')ee.Initialize(credentials)

вместо использования функции Python API ee.Authenticate() с интерактивной авторизацией каждого сеанса. Смотрите также консольную авторизацию


$ earthengine earthengine --ee_config

Аналогично, ключ сервисного аккаунта позволяет авторизоваться и при использовании Python GDAL:


import osfrom osgeo import gdalos.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "my-service-account.json"

Или консольных утилит GDAL:


export GOOGLE_APPLICATION_CREDENTIALS=my-service-account.json

Извлечение растров GEE


Для получения растров мы будем говорить о методе API Method: projects.assets.getPixels Такой доступ обеспечивает высокую скорость передачи данных и позволяет копировать огромные объемы данных, но отдельными блоками размером не более 32MB. К счастью, проект GDAL уже предоставляет обертку для этого API, так что достаточно одного вызова нужной утилиты или функции для передачи всего растра целиком.


Возьмем практический пример для консольных утилит GDAL и на Python. Просмотрим набор данных WorldPop/GP/100m/pop и извлечем один из найденных растров за 2020 год. Растры в этом наборе варьируются в размере по порядку величины от мегабайт до гигабайт, для примера выберем один из небольших:


export GOOGLE_APPLICATION_CREDENTIALS=my-service-account.json# fetch collectionogrinfo -ro -al "EEDA:" -oo COLLECTION=projects/earthengine-public/assets/WorldPop/GP/100m/pop -where "year=2020" # show one raster infogdalinfo "EEDAI:projects/earthengine-public/assets/WorldPop/GP/100m/pop/ZWE_2020"# fetch one raster to local drivegdal_translate "EEDAI:projects/earthengine-public/assets/WorldPop/GP/100m/pop/ZWE_2020" ZWE_2020.tif

Аналогично на Python:


import osfrom osgeo import ogr, gdal# define service account keyos.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "my-service-account.json"# fetch collectiondriver = ogr.GetDriverByName('EEDA')ds = driver.Open('EEDA:projects/earthengine-public/assets/WorldPop/GP/100m/pop')layer = ds.GetLayer()# filter collection by attributelayer.SetAttributeFilter('year=2020')# select 1st rasterfor feature in layer:    name = feature.GetField("name")    crs = feature.GetField("band_crs")    print ('raster name and crs:',name, crs)    break# fetch 1st raster from the collection to arrayds = gdal.Open(f'EEDAI:{name}')band = ds.GetRasterBand(1)array = band.ReadAsArray()print ('raster shape:', array.shape)

Заключение


Выше мы рассмотрели достаточно продвинутые техники работы с Google Earth Engine. Если вы обращаетесь к GEE регулярно, намного удобнее использовать шелл скрипты и Python Jupyter ноутбуки и иметь возможность сохранять практически произвольные объемы данных локально без промежуточных облачных хранилищ и без ожидания выполнения очереди заданий экспорта, которое может затянуться. Отдельно отмечу, что вовсе не обязательно извлекать сырые данные можно их предварительно обработать средствами GEE. За подробностями серверной обработки, работы с GDAL и отображения данных обратитесь к ссылкам ниже.


Мне было бы интересно получить обратную связь от читателей: стоит ли обращаться к более сложным темам или и это уже за гранью того, что интересует русскоязычную аудиторию? Знаю, что немало читателей здесь используют Google Transtale и подобные переводчики, возможно, стоит сразу писать на английском на LinkedIn, как я уже делаю с публикациями по геофизике.


Ссылки


EEDAI Google Earth Engine Data API Image


Raster API tutorial


Vector Layers


Using GDAL / OGR for Data Processing and Analysis


Raster Layers


Raster (gridded) dataset handling


FROM GEE TO NUMPY TO GEOTIFF


How to load GeoJSON files into BigQuery GIS

Источник: habr.com
К списку статей
Опубликовано: 26.03.2021 14:15:31
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Open source

Программирование

Геоинформационные сервисы

Визуализация данных

Научно-популярное

Earth engine

Big data

Gdal/ogr

Python

Jupyter notebook

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru