GEE中IF判断异常:flag值为0时仍返回yes,该如何解决?
GEE中IF判断结果异常问题解决
问题原因
你代码中定义的flag是GEE的服务端ee.Number对象,并非原生JavaScript数值。浏览器端的原生if判断只会识别变量本身是否为非空对象,不会自动读取该服务端对象存储的实际数值:只要flag这个对象存在,不管其存储的数值是0还是其他,if(flag)都会判定为真,所以才会在flag实际值为0的情况下打印出yes。
你在控制台看到的0是GEE对服务端对象做异步解析后展示的结果,并不会在本地JS同步运行时参与判断。
解决方法
有两种常用的修正方案:
方案1:使用GEE服务端条件判断API ee.Algorithms.If
该方案适合判断逻辑需要嵌入GEE运算流(比如要在地图上添加图层、导出数据等场景),无需把数据传到客户端:
var img=imageCollection.filterBounds(geometry).filterDate('2021-08-09','2021-08-10').median(); print(img) var flag=img.bandNames().size(); print(flag); // 用服务端判断逻辑 var result = ee.Algorithms.If(flag.gt(0), 'yes', 'no'); print(result);
方案2:将服务端值拉取到本地后再做判断
调用.getInfo()方法把服务端的数值同步到本地成为原生JS数值,再做判断,适合纯前端脚本逻辑判断场景:
var img=imageCollection.filterBounds(geometry).filterDate('2021-08-09','2021-08-10').median(); print(img) // 调用getInfo()获取本地数值 var flag=img.bandNames().size().getInfo(); print(flag); if(flag > 0) { print('yes') }
注意:
.getInfo()是同步请求,数据量大时会阻塞页面运行,非必要不建议频繁调用。
问题对应运行截图

内容的提问来源于stack exchange,提问作者River Zhang
相关产品推荐
相关产品推荐

