GEE 不将数据导入数组

GEE do not import data into array

我在使用 Python API 将数据从 Google Earth Engine 导入本地阵列时遇到问题。

我的代码的简化版本:

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好像是空的

有人知道我做错了什么吗?

谢谢!

您似乎想从 earth engine 下载数据,然后将它们与 numpy 一起使用。你在这里做错了两件事:

  1. 您正在将 Google Earth Engine 视为下载服务。这不是 Earth Engine 的目的。如果您想下载大量数据(例如一年的 Terra Surface Reflectance),您应该直接从服务提供商处下载。您唯一应该从 Earth Engine 下载的是您在 Earth Engine 中进行的分析的最终结果。

  2. .getInfo 不会为您提供卫星数据,它只会以 JSON 对象的形式为您提供 ImageCollection 的元数据。如果你想要实际的栅格数据,你必须导出它(如 1 中所述,你不应该为这个数据量做)。

你离目标不远了,至少在一定程度上是这样。通过这样的请求可以传输多少像素是有限制的,即 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())

它是波兰弗罗茨瓦夫的一个区域,通过 imshow 传递给 matplotlib 时看起来像这样:

如果你真的需要整张图片怎么办?这就是 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 一样访问它(参见 this GIS Stack Exchange post).