在GEE中使用不同位的QA

在GEE中使用不同位的QA,qa,masking,google-earth-engine,Qa,Masking,Google Earth Engine,我在选择MCD64A1燃烧区产品的高质量数据时遇到了一个问题。 ,是对QA波段的描述,但我真的对不同的比特感到困惑 我要做的是选择所有 在陆地上进行高质量的观测,并根据这些观测掩盖采集。我有以下几点,但这不是正确的方法 谢谢你的帮助 var geometry = /* color: #d63000 */ee.Geometry.Polygon( [[[23.821277851635955, 46.07285332090363], [23.

我在选择MCD64A1燃烧区产品的高质量数据时遇到了一个问题。 ,是对QA波段的描述,但我真的对不同的比特感到困惑

我要做的是选择所有 在陆地上进行高质量的观测,并根据这些观测掩盖采集。我有以下几点,但这不是正确的方法

谢谢你的帮助

    var geometry = /* color: #d63000 */ee.Geometry.Polygon(
            [[[23.821277851635955, 46.07285332090363],
              [23.274708027417205, 45.952681148559265],
              [24.11378883796408, 45.554067690813184],
              [24.89381813483908, 45.84372892769175],
              [24.17146706062033, 46.25167241706428]]]);
    var dataset = ee.ImageCollection('MODIS/006/MCD64A1')
                      .filterBounds(geometry)
        .map(function(image){return image.clip(geometry)}) 
                          .filter(ee.Filter.calendarRange(7,7,'month'));
    var burnedArea = dataset.select('BurnDate','QA');

//good quality observations

var good= (function(img) {
  var goodQA = img.select("QA").eq(1); 
  return img.updateMask(burnedArea .and(goodQA));
});
编辑

此外,我尝试了以下方法,没有错误,也没有数据

var good= function(img){  
  var qa = img.select(['QA']);
  var mask = qa.bitwiseAnd(0).eq(1).and( 
             qa.bitwiseAnd(1).eq(1)).and( 
             qa.bitwiseAnd(2).eq(1)); 
  return img.updateMask(mask);
};

我认为此代码可能适合您的需要:

var good = function(img) {
    var qa = img.select(['QA']);
    var mask = qa.bitwiseAnd(3).eq(3);
    return img.updateMask(mask);
}
burnedArea = burnedArea.map(good);
基本上,这段代码只是修改编辑代码中的行
var mask=…
。行后
burnedArea=burnedArea.map(良好)
,您的
burnedArea
变量将仅显示
QA
波段中具有“位0值1和位1值1”的像素

由于数字
3
具有二进制形式的
11
(位0值1和位1值1),
qa.bitwiseAnd(3)
所做的是将
qa
波段中的任何像素转换为四个值中的一个:

  • 如果
    QA
    像素具有“位0值1和位1值1”(例如3、7、11、15等),则
    3
    的值

  • 如果
    QA
    像素具有“位0值0和位1值1”(例如2、6、10等),则
    2的值

  • 如果
    QA
    像素具有“位0值1和位1值0”(例如1、5、9等),则
    1的值

  • 如果
    QA
    像素具有“位0值0和位1值0”(例如0、4、8等),则
    0的值

您可能已经知道,
.eq(3)
部分将值为
3
的像素转换为
1
,其余部分转换为
0


希望这能消除您对“bits”内容的困惑。

您所说的“陆地上的高质量观测”是什么意思?它们是位0处“QA”值为1(即陆地网格单元)、位1处“QA”值为1(即足够的有效数据)和位2处“QA”值为1(映射周期缩短)的像素吗?你想隐藏还是显示这些像素?嗨,凯文。嗨,凯文,我想要陆地网格单元(位0,值1),有足够的数据(位1,值1),如果观测不可靠(位2,值1),则缩短映射周期。这些是我想要保留的像素。如果我理解正确,您想要保留具有(位0值1和位1值1)或(位0值1、位1值0和位2值1)的像素。是这样吗?嗨@Kevin,从你的通讯录,我想保留位0值1和位1值1的像素dear@Kevin,谢谢你的回答。解释得很好。尽管如此,我仍然对如何选择给定值感到困惑,因为您的代码使用了值3。选择该值的逻辑是什么?你能扩展你之前的答案,这样这个价值选择就被纳入了吗?嗨,菲利普,我相信你想要得到什么将决定你选择哪个价值。3的值是@geo_dd在其评论中告诉我的@geo_dd位于具有“陆地网格单元”(对应于位0处的值1)和“足够有效数据”(位1处的值1)的像素之后。您可以在代码编辑器中找到有关
MODIS/006/MCD64A1
集合的
QA
波段的每一位含义的更多信息。