Google Earth Engine中map调用多参数函数的额外参数传递方法
正确参数传递实现方式
Google Earth Engine(GEE)的ee.ImageCollection.map()接收的函数需要运行在GEE服务端上下文,原生JavaScript的bind是客户端语法,无法将本地定义的dry2014、wet2014(GEE服务端对象)正确传递到服务端执行逻辑中,因此调用不生效。
正确的实现方式采用高阶闭包函数封装参数,返回仅接收单张影像作为入参的函数供map调用即可:
// 定义高阶函数,先接收driest、wettest参数 function createMoistureCalculator(driest, wettest) { // 返回仅接受img参数的函数,符合map的入参要求 return function(img) { var img = img.clip(table).select('VV') var sensitivity = wettest.subtract(driest); var SMmax = 0.32; var SMmin = 0.05; var calculateSSM = function (image){ return image.addBands(((image.subtract(driest)).divide(sensitivity)) .multiply(SMmax - SMmin).add(SMmin)); }; var ssm = calculateSSM(img); return ssm.select('VV_1').rename('moisture'); } } // 调用时先传入干湿极值参数,得到计算函数后传给map var moisture2014 = coll2014.map(createMoistureCalculator(dry2014, wet2014))
内置dry2014、wet2014到函数的实现
可以将极值计算逻辑内置到moisture函数中,只需要把待处理的影像集合作为入参传入即可,适合批量处理多时间段集合的场景:
// 内置极值计算的湿度集合处理函数,入参为待处理的S1影像集合 function calculateCollectionMoisture(collection) { // 内部计算当前集合的干湿极值 var driest = collection.min(); var wettest = collection.max(); var SMmax = 0.32; var SMmin = 0.05; // 单张影像的湿度计算逻辑 function calcSingleImgMoisture(img) { var img = img.clip(table).select('VV'); var sensitivity = wettest.subtract(driest); var calculateSSM = function (image){ return image.addBands(((image.subtract(driest)).divide(sensitivity)) .multiply(SMmax - SMmin).add(SMmin)); }; var ssm = calculateSSM(img); return ssm.select('VV_1').rename('moisture'); } // 返回处理完成的湿度影像集合 return collection.map(calcSingleImgMoisture); } // 直接传入原始影像集合调用即可,无需提前计算极值 var moisture2014 = calculateCollectionMoisture(coll2014);
内容的提问来源于stack exchange,提问作者benedetta
相关产品推荐
相关产品推荐

