哪个功能适合云遮罩

时间:2019-01-15 04:00:07

标签: mask google-earth-engine

我正在编写一个掩盖Sentinel-2数据的模糊像素的函数。

功能1:

function cloudMask(image) {
  var qa = image.select('QA60');
  var cloudBitMask = 1 << 10; ###
  var cirrusBitMask = 1 << 11; ###
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(
             qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}

功能2:

function cloudMask(image) {
  var qa = image.select('QA60');
  var cloudBitMask = Math.pow(2, 10); ###
  var cirrusBitMask = Math.pow(2, 11); ###
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(
             qa.bitwiseAnd(cirrusBitMask).eq(0));
  return image.updateMask(mask).divide(10000);
}

哪个功能正确? 两个函数之间的区别在于如何定义cloudBitMaskcirrusBitMask

1 个答案:

答案 0 :(得分:1)

这两个函数都是正确的,因为它们在做完全相同的事情。 1 << 10Math.pow(2, 10)都将产生一个值为1024的数字。

由于我们通常同时使用不透明云和卷云进行云遮罩,因此我建议保持代码简短明了:

function cloudMask(image) {
    var qa = image.select('QA60');
    var allCloudBitMask = (1 << 10) + (1 << 11);
    var mask = qa.bitwiseAnd(allCloudBitMask).eq(0);
    return image.updateMask(mask);
}