GEE不将数据导入阵列

2024-05-16 13:35:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用Python API将数据从Google Earth引擎导入本地数组时遇到问题

我的代码的简化版本:

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似乎是空的

有人知道我做错了什么吗

谢谢


Tags: apiimggetnploadarrayb2ee
2条回答

似乎您想从地球引擎下载数据,然后将其与numpy一起使用。你在这里做错了两件事:

  1. 您将Google Earth引擎视为下载服务。这不是地球引擎的目的。如果你想下载大量数据(比如一年的地表反射率),你应该直接从服务提供商那里下载。您应该从地球引擎下载的唯一内容是您在地球引擎中进行的分析的最终结果

  2. .getInfo不会获取卫星数据,它只会以JSON对象的形式获取ImageCollection的元数据。如果要导出实际的光栅数据,则必须将其导出(如1所述,对于如此多的数据,您不应该这样做)

你离目标不远,至少在一定程度上是这样。在这样一个请求中可以传输多少像素是有限制的,即262144。当你的图像覆盖整个地球时(就像你正在做的那样),你的图像有373248000个,超过10000x个。尽管如此,您仍可以对一小块区域进行采样,然后放入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时,看起来是这样的:

satellite image

如果你真的需要整个图像呢?这就是Export.image.toDrive发挥作用的地方。以下是您将图像下载到Google Drive的方式:

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一样访问它(请参阅thisGIS Stack Exchange post)

相关问题 更多 >