В этом уроке будут объяснены доступ к данным куба данных и управление ими. Это даст вам общее представление об общих функциях в кубе данных, прежде чем более полезные варианты использования будут рассмотрены в следующем уроке. Надеюсь, что к этому моменту вы сможете писать свои собственные функции для использования куба данных для помощи в собственном анализе.
В скрипте Python модуль куба данных импортируется так же, как и другие модули, с помощью оператора импорта. База данных, которая организует и хранит все данные, настраивается до того, как какие-либо данные помещаются в куб данных, поэтому процесс импорта модуля "datacube" будет подключаться к datacube.
После импорта нам нужно фактически инициализировать куб данных, и это делается с помощью команды ниже:
import datacube
dc = datacube.Datacube()
Переменная dc
- это инициализированный экземпляр куба данных, и это класс, из которого можно запускать множество методов, что позволяет нам загружать данные из куба данных в Python, чтобы делать с ними полезные вещи. Кроме того, мы можем видеть, какие данные находятся в кубе данных или какие спутники / источники данных присутствуют. Мы рассмотрим некоторые из этих функций, чтобы понять структуры данных куба данных, чтобы, когда дело доходит до загрузки данных в редактор Python, мы были более подготовлены к их использованию.
Первое, на что следует обратить внимание, - это «продукты», содержащиеся в кубе данных. Продукт может относиться к типу данных, содержащихся в кубе данных. Например, продуктом могут быть данные Sentinel-2 уровня 2 (данные с атмосферной коррекцией) или данные декадных индексов, такие как NDVI, NDSI или VHI.
Следующая команда перечисляет все типы продуктов в кубе данных, а также некоторую информацию об этих продуктах. Запустите поле ниже, чтобы сделать это:
dc.list_products()
Как видно выше, здесь перечислены все различные продукты данных в кубе данных. Каждый из этих продуктов данных будет иметь один или несколько диапазонов данных, включенных в куб данных, и мы можем проверить, какие диапазоны или измерения будут иметь каждый тип продукта, используя команду ниже:
dc.list_measurements()
В нем перечислено много полезной информации, включая названия каждого бэнда, которая полезна для загрузки данных в куб данных. Также указана дополнительная информация, такая как тип данных бэндов и отсутствие в них значений данных.
Зная все это, теперь можно загрузить некоторые данные из куба данных в Python. Это делается с помощью функции dc.load()
. Есть ряд вещей, которые необходимо указать для загрузки данных, а также некоторые вещи, которые полезно указать.
Обязательными аргументами являются тип продукта (например, s2_10m
для данных Sentinel-2 10m), output_crs данных (в какой проекции он вызывается, стандартная проекция в кубе данных - WGS84 UTM 43N или EPSG: 32643, но многие могут использовать другие типы проекций) и разрешение данных в единицах размера x и y пикселей. Если вы загружаете данные в проекции UTM, они измеряются в метрах, поэтому для загрузки данных Sentinel с разрешением 10 м команда будет иметь resolution=[10,10]
.
Дополнительная информация, которая может быть предоставлена, - это широта и долгота области данных, которую вы хотите загрузить, а также интересующий вас период времени. Хотя вводить эту информацию при загрузке данных не требуется, highly recommended это, поскольку в кубе данных много данных, поэтому попытка загрузить большие объемы данных таким образом приведет к тому, что ваша программа будет работать очень медленно или, что более вероятно, полностью выйдет из строя.
Иногда вам может потребоваться загрузить большой объем данных для обработки, и есть способы сделать это, которые будут объяснены в следующих уроках. Это нужно делать очень осторожно, постоянно обращая внимание на требования к памяти и обработке данных.
Однако ниже приведен пример загрузки небольшого количества данных в куб данных:
ds = dc.load(product='s2_10m',x=[69.0,69.5],y=[39.0,39.5],time=['2019-06-01','2019-06-10'],measurements=['red','green','blue'],output_crs='EPSG:32643',resolution=[10,10])
print(ds)
Это очень длинный и трудный для чтения способ вызова данных в Python. Есть способ сделать это более читаемым способом, который состоит в том, чтобы определить многие аргументы перед загрузкой данных в нечто, называемое словарем. Все содержимое этого словаря можно вызвать в качестве аргументов функции dc.load (), используя две звездочки ** перед именем словаря, чтобы загрузить их все. Сделать это можно следующим образом:
query = {'x': [69.0,69.5],
'y': [39.0,39.5],
'time': ['2018-06-01','2018-06-10'],
'measurements': ['red','green','blue'],
'output_crs': 'EPSG:32643',
'resolution': [100,100],
}
ds = dc.load(product='l8_30m', **query)
print(ds)
Это гораздо легче читать, чем заполнять все аргументы по отдельности. Это также упрощает изменение области, для которой вы хотите получить данные, или полос данных, если вы загружаете данные из нескольких продуктов, поскольку вам нужно изменять значения только в словаре, а не в каждой функции dc.load()
.