GEE导出资产到Drive为GeoTIFF时报Cannot export array bands错误如何解决
GEE导出CCDC结果报错
Cannot export array bands.解决方案 报错原因
GeoTIFF格式仅支持存储像素为标量值的波段,TemporalSegmentationCCDC算法输出的所有波段默认是数组型波段,哪怕单独选中单个波段,该波段的每个像素存储的仍然是一个数组而非单个数值,不符合GeoTIFF的格式要求,所以会触发该报错。
具体解决步骤
- 步骤1:确认波段类型
运行以下代码打印选中波段的类型,确认是否为数组类型:
如果返回结果包含print(temporalSeg_band1.bandTypes())ArrayType即可确认是数组波段问题。 - 步骤2:将数组波段展开为标量波段
使用GEE内置的arrayFlatten方法将数组中的每个值拆解为单独的标量波段,两种写法可供选择:- 手动指定子波段名称(适用于已知数组内参数含义的场景,比如CCDC的系数包含截距、斜率、谐波项等)
// 示例为4个系数的情况,可根据你实际的数组长度调整名称和数量 var flattened_blue = temporalSeg_band1.arrayFlatten([ ['blue_intercept', 'blue_slope', 'blue_cos1', 'blue_sin1'] ])- 自动生成子波段名称(适用于不清楚数组含义或需要批量处理的场景)
var array_length = temporalSeg_band1.arrayGet(0).size() var sub_band_names = ee.List.sequence(1, array_length).map(function(num) { return ee.String('blue_coef_').cat(ee.Number(num).int()) }) var flattened_blue = temporalSeg_band1.arrayFlatten([sub_band_names]) - 步骤3:使用展开后的影像执行导出
将导出代码中的image参数替换为展开后的标量波段影像即可:Export.image.toDrive({ image: flattened_blue, description: "Band_blue_coeffecient", folder: "GEE_data", fileNamePrefix: "Blue_coef", scale: 30, region: aoi, maxPixels: 10000000, shardSize: 100, fileDimensions: 5000, crs: "EPSG:3338", fileFormat: "GeoTIFF" })
批量导出全部35个波段的方法
如果需要导出资产内全部35个数组波段,可使用批量展开的方式处理整幅影像:
var processed_image = ee.ImageCollection(image_temporalSeg.bandNames().map(function(band_name) { var arr_band = image_temporalSeg.select(ee.String(band_name)) var len = arr_band.arrayGet(0).size() var sub_names = ee.List.sequence(1, len).map(function(num) { return ee.String(band_name).cat('_').cat(ee.Number(num).int()) }) return arr_band.arrayFlatten([sub_names]) })).toBands().rename(image_temporalSeg.bandNames().map(function(band_name) { var len = image_temporalSeg.select(ee.String(band_name)).arrayGet(0).size() return ee.List.sequence(1, len).map(function(num) { return ee.String(band_name).cat('_').cat(ee.Number(num).int()) }) }).flatten()) // 导出processed_image即可
内容的提问来源于stack exchange,提问作者user16810594
相关产品推荐
相关产品推荐

