问题描述
我对 GEE 还很陌生,我正在尝试处理一些图像,然后下载结果。我需要屏蔽大约 30 年的 Landsat 数据以隔离不同的土地覆盖类型、去除云层并计算植被指数。然后,我需要导出这些数据以在 R 中进行进一步分析。我已经设法完成了所有的掩蔽和计算植被指数,但是当我导出数据时,它给了我 user memory limit exceeded
错误。我试图一次只下载 1 年的数据,但遇到了同样的错误。我不确定如何完成我正在做的事情,即在 GEE 中对数据进行大量处理,然后将其导出到其他地方进行额外分析。有什么建议吗?代码如下。
编辑:按照建议添加了 ROI 信息。
var l8sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterDate('2013-07-01','2018-06-30');
//Function to mask forest
var maskForest = function(img){
var mask = forest.eq(1);
return img.updateMask(mask);
};
// Function to mask flooded area
var maskFld = function(img){
var mask = fldpln.eq(1);
return img.updateMask(mask);
};
// Cloud masking function
var mask = require('users/fitoprincipe/geetools:cloud_masks');
var mask_fun = mask.landsatSR();
// Create EVI mapping functions
var EVI8 = function(img){
var evi = img.expression(
'2.5*((NIR/10000-RED/10000)/(NIR/10000 + 6 * RED/10000 - 7.5 * BLUE/10000 + 1))',{
'NIR': img.select('B5'),'RED': img.select('B4'),'BLUE': img.select('B2')
}).rename('EVI');
return(img.addBands(evi));
};
// Map the forest/savanna/cloud masks and indices to the image collections and select the VI bands
var l8srFldFor = l8sr.map(maskForest).map(maskFld).map(mask_fun).map(EVI8)
// Download images from collection to Drive
var batch = require('users/fitoprincipe/geetools:batch');
var roi = ee.Geometry.Rectangle([[-48.425,-9.577],[-48.036,-8.390]]);
batch.Download.ImageCollection.toDrive(l8srFldFor,'LandsatTiles',{scale: 30,region: roi,type: 'float'});```
解决方法
您想从世界各地下载吗?
,我认为问题在于您没有对 landsat 8 集合应用任何空间过滤器。因此,生成的集合包括从“2013-07-01”到“2018-06-30”获取的每个 landsat 8 图像。所以很可能这导致了 user memory limit exceeded
错误。要根据您的 roi
应用空间过滤器,您应该使用 filterBounds
。
var roi = ee.Geometry.Rectangle([[-48.425,-9.577],[-48.036,-8.390]]);
var l8sr = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterDate('2018-05-01','2018-06-30')
.filterBounds(roi);