我参照了一位博主利用Landsat影像使用大津算法提取水体阈值的代码,想改出来一个在自己的感兴趣区利用modis数据提取水体阈值的代码,但是修改时出现了geometry未绑定、保存图像超时的问题。以下是解决办法:
错误一:
Number (Error) Image.reduceRegion:Provide 'geometry' parameter when aggretating over an unbounded image.(Image.reduceRegion这里出错了,当在一个未绑定的图像上聚合时,要提供'geometry'参数。)
改正方法:把与reduceRegion有关的代码里自定义的geometry参数都改成自己上传的矢量区域变量。例如:原博的一处代码为:
//Landsat water extraction based on otsu
var histogram = MNDWI_Landsat.reduceRegion({
reducer: ee.Reducer.histogram(),
geometry: MNDWI_Landsat.geometry(),
scale: 30,
maxPixels: 1e13,
tileScale: 8
});
————————————————
版权声明:本文为CSDN博主「lvbta」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_48104689/article/details/118228061
我要改成:
var histogram = NDWI_MODIS.reduceRegion({
reducer: ee.Reducer.histogram(),
geometry: table,
scale: 30,
maxPixels: 1e13,
tileScale: 8
});
当然,并不是只改这一段就可以了,而是把所有有关Landsat的信息都改成与 MODIS相对应的信息。 不过我现在也没弄懂为啥第三行不能改成geometry:NDWI_MODIS.geometry(),我的NDWI_MODIS图像是用矢量裁剪后的clip图像计算出来的,按理说NDWI_MODIS.geometry()也是可以的呀......但事实证明这样也会有上面的报错。
错误二:
Error: Computation timed out.(计算超时)
在计算水域图像时,要等很长时间也算不出来,下载water1影像时也下载不下来,后来突然看到scale,就明白问题出现在哪了。scale是分辨率的意思,原博是基于Landsat的代码,scale分辨率是30m,而我使用的是MOD09A1,分辨率是500,所以要把所有scale都改成500,修改后的那段代码为:
var histogram = NDWI_MODIS.reduceRegion({
reducer: ee.Reducer.histogram(),
geometry: table,
scale: 500,
maxPixels: 1e13,
tileScale: 8
});
同样,不能只改这一段代码哦,要把所有scale都改成500m。