我在选择MCD64A1燃烧区域产品的高质量数据时遇到问题。 Here是对质量检查频段的描述,但我确实对不同的位感到困惑。
我要做的是选择所有 在土地上进行高质量的观测,并基于它们进行掩盖。我有以下内容,但这不是正确的方法。
感谢您的帮助。
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);
};
答案 0 :(得分:1)
我认为这段代码可能适合您的需求:
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(good);
行之后,您的burnedArea
变量将仅显示在QA
波段中具有“位0值1和位1值1”的像素。
由于数字3
的二进制形式为11
(位0值1和位1值1),所以qa.bitwiseAnd(3)
所做的就是将QA
波段中的任何像素变成四个值之一:
3
像素具有“ bit 0值1和bit 1值1”(例如3、7、11、15等)的值QA
2
像素具有“位0值0和位1值1”(例如2、6、10等)的值QA
1
像素具有“ bit 0值1和bit 1值0”(例如1、5、9等)的值QA
0
像素具有“ bit 0值0和bit 1值0”(例如0、4、8等)的值QA
(例如0、4、8等)
您可能已经知道,.eq(3)
部分将值3
的像素转换为1
,其余部分转换为0
。
希望这可以消除您对“小问题”的困惑。