GEE не импортирует данные в массив - PullRequest
3 голосов
/ 07 марта 2020

У меня проблемы с импортом данных из Google Earth Engine в локальный массив с использованием Python API.

Упрощенная версия моего кода:

import ee
ee.Initialize()

#Load a collection
TERRA = ee.ImageCollection("MODIS/006/MOD09A1").select(['sur_refl_b02', 'sur_refl_b07',"StateQA"])
TERRA = TERRA.filterDate('2003-01-01', '2019-12-31')

#Extract an image
TERRA_list = TERRA.toList(TERRA.size())
Terra_img = ee.Image(TERRA_list.get(1))

#Load as array
Terra_img = Terra.get('sur_refl_b02')
np_arr_b2 = np.array(Terra_img.getInfo())

Но, похоже, np_arr_b2 быть пустым

Кто-нибудь знает, что я делаю не так?

Спасибо!

Ответы [ 2 ]

1 голос
/ 10 марта 2020

Вы не далеко от цели, по крайней мере, в определенной степени. Существует ограничение на количество пикселей, которое может быть передано по такому запросу, а именно 262144. Ваше изображение при съемке по всему земному шару (как вы делаете) имеет 3732480000 - в 10000 раз больше. Тем не менее, вы можете отобрать небольшую область и вставить numpy:

import ee
import numpy as np
import matplotlib.pyplot as plt

ee.Initialize()

#Load a collection
TERRA = ee.ImageCollection("MODIS/006/MOD09A1").select(['sur_refl_b02', 'sur_refl_b07',"StateQA"])
TERRA = TERRA.filterDate('2003-01-01', '2019-12-31')

#Extract an image
TERRA_list = TERRA.toList(TERRA.size())
Terra_img = ee.Image(TERRA_list.get(1))
img = Terra_img.select('sur_refl_b02')

sample = img.sampleRectangle()
numpy_array = np.array(sample.get('sur_refl_b02').getInfo())

Это область над Вроцлавом, Польша, и выглядит так, когда передается matplotlib через imshow:

satellite image

Что, если вам действительно нужно все изображение? Вот где Export.image.toDrive вступает в игру. Вот как вы можете загрузить изображение на Google Диск:

bbox = img.getInfo()['properties']['system:footprint']['coordinates']
task = ee.batch.Export.image.toDrive(img, 
    scale=10000,
    description='MOD09A1',
    fileFormat='GeoTIFF',
    region=bbox)
task.start()

После завершения задачи (которую вы также можете отслеживать с Python), вы можете загрузить свое изображение с Диска и получить к нему доступ как любой другой GeoTIFF (см. этот пост обмена ГИС-стека).

0 голосов
/ 10 марта 2020

Похоже, вы хотите загрузить данные из Earth Engine, чтобы затем использовать их с numpy. Здесь вы делаете две вещи неправильно:

  1. Вы рассматриваете Google Earth Engine как службу загрузки. Это не цель Earth Engine. Если вы хотите загружать большие объемы данных (как в вашем случае год Terra Surface Reflectance), вы должны загрузить их непосредственно у поставщиков услуг. Единственное, что вы должны загрузить с Earth Engine, это конечные результаты вашего анализа, проведенного вами в Earth Engine.

  2. .getInfo не дает вам спутниковые данные, а только получите метаданные вашей коллекции изображений в виде JSON объекта. Если вы хотите получить фактические растровые данные, вам придется их экспортировать (что, как сказано в 1, не следует делать для этого объема данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...