粉丝问题:
我正在尝试运行一个非常简单的脚本,该脚本应该将 Landsat 8 图像导出到我的 Google Drive。当我在任务上单击“运行”时,GEE 吐出一个错误:“错误:导出的波段必须具有兼容的数据类型;发现不一致的类型:Float32 和 UInt16。(错误代码:3)”
这特别奇怪,因为当我使用“检查器”工具检查图像时,我使用的所有波段(波段 4、波段 3、波段 2)都具有相同的数据类型(浮点数)。我用不同的图像集合重复了这个过程并得到了相同的结果。任何帮助将不胜感激。
源代码:
var rktcity = /* color: #d63000 */ee.Geometry.Point([-86.5855234096938, 34.72665015863473]); var l8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA") var l8_filt = l8.filterBounds(rktcity) .filterDate("2018-06-01", "2018-07-01") .first() var visual_params = { bands: ['B4', 'B3', 'B2'], min: 0, max: 0.2 } Map.addLayer(l8_filt, visual_params, 'landsat 8 toa') print(l8_filt); Export.image.toDrive( l8_filt, 'ls8_hsv_062018' )
问题处在哪里呢?这里首先是我们再进行影像波段筛选的时候一定要提前筛选我们所需要的影像波段,否则到时候回出现很多波段不一样类型,有的是整形,有的是浮点型:
Error: Exported bands must have compatible data types; found inconsistent types: Float32 and UInt16. (Error code: 3)
这里有两种解决方案,方案一是就是首先在影像筛选的阶段就完成对影像波段的筛选工作,也就是影像预处理阶段,最后把后续出现的问题都解决掉,把问题扼杀在摇篮里,这样我们有利于后续的处理简单化;第二种方案则是通过在导出影像的时候进行将需要导出的部分进行处理,也就是设定Export.image.toDrive中的参数,把参数设定好了进行导出也是可以的。
大家可以将以上两种方案都进行实验
修改后的代码:
var rktcity = /* color: #d63000 */ee.Geometry.Point([-86.5855234096938, 34.72665015863473]); Map.centerObject(rktcity, 9); var l8 = ee.ImageCollection("LANDSAT/LC08/C02/T1_TOA") var l8_filt = l8.filterBounds(rktcity) .filterDate("2018-06-01", "2018-07-01") .first() //修改方法1 var l8_filt = l8.filterBounds(rktcity) .filterDate("2018-06-01", "2018-07-01") .select(['B4', 'B3', 'B2']) .first() var visual_params = { bands: ['B4', 'B3', 'B2'], min: 0, max: 0.2 } Map.addLayer(l8_filt, visual_params, 'landsat 8 toa') print(l8_filt); Export.image.toDrive( l8_filt.toFloat(), 'ls8_hsv_062018' ) //修改方法2 Export.image.toDrive( l8_filt.select(['B4', 'B3', 'B2']), 'ls8_hsv_062018' )
运行后的结果:当然这里没有进行mosaic,所以只是一小块下载结果: