GEE批量下载ROI裁剪MODIS LST时序报Error code3错误求解
MODIS LST批量导出坐标转换错误修复
问题背景
- 需求:将指定ROI裁剪后的MODIS LST时间序列数据批量下载到本地
- 故障表现:代码可正常提交,但任务面板中导出影像任务执行失败,无法完成下载
- 报错信息:error: Can't transform (23807.0,20016.0) (Error code: 3)
- 原问题代码:
var batch = require('users/fitoprincipe/geetools:batch') var table = ee.FeatureCollection("projects/ee-xrpt/assets/studyarea"); Map.addLayer(table); var dataset = ee.ImageCollection('MODIS/006/MOD11A1').select('LST_Day_1km') var dataset_filter = dataset.filterDate('2019-09-01','2020-01-10') //.map(function(image){return image.clip(table)}) .limit(2); function clp(img) { return img.clip(table) } var clippeddataset = dataset_filter.map(clp) batch.Download.ImageCollection.toDrive(clippeddataset, 'Folder', {scale: 1000, region: table.getInfo()["coordinates"], type: 'float'})
故障原因
报错属于坐标转换异常,核心问题是导出参数配置错误:
- 直接通过
table.getInfo()["coordinates"]传入导出范围的写法存在缺陷:当研究区是多要素集合、或要素坐标嵌套结构复杂时,坐标数组无法被导出接口正确识别 table.getInfo()属于客户端取值操作,本身稳定性差,研究区矢量稍大时就可能出现取值异常,不推荐在导出参数中使用- 导出时未显式指定输出坐标系,接口在自动做MODIS原始正弦投影到导出投影的转换时,因范围参数格式错误触发转换失败
- 提前在map阶段对影像做裁剪属于冗余操作,导出时指定region参数会自动完成范围裁剪,提前裁剪反而会增加不必要的计算消耗
修复后代码
var batch = require('users/fitoprincipe/geetools:batch') var table = ee.FeatureCollection("projects/ee-xrpt/assets/studyarea"); Map.addLayer(table, {}, 'study_area'); // 筛选目标时段、目标波段的MODIS LST数据 var dataset = ee.ImageCollection('MODIS/006/MOD11A1').select('LST_Day_1km') var dataset_filter = dataset.filterDate('2019-09-01','2020-01-10').limit(2); // 配置批量导出参数 batch.Download.ImageCollection.toDrive(dataset_filter, 'Folder', { scale: 1000, // 直接传入研究区几何边界作为导出范围,使用服务端对象稳定性更高 region: table.geometry().bounds(), // 显式指定输出坐标系,避免投影转换错误 crs: 'EPSG:4326', // 调大像素上限,避免大范围研究区导出触发上限报错 maxPixels: 1e13, type: 'float' })
操作说明
代码提交后可在Task面板点击Run确认导出任务,任务全部完成后即可从Google Drive对应文件夹下载数据到本地。
内容的提问来源于stack exchange,提问作者Xarapat Ablat
相关产品推荐
相关产品推荐

