QA с разными битами в GEE

Я столкнулся с проблемой, связанной с выбором данных хорошего качества для продукта зоны выгорания 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);
};

person geo_dd    schedule 07.03.2019    source источник
comment
Что вы подразумеваете под наблюдениями хорошего качества над сушей? Являются ли они пикселями со значением QA, равным 1, в бите 0 (т. е. ячейке наземной сетки), значением QA, равным 1, в бите 1 (т. е. достаточно достоверных данных) и значением QA, равным 1 в бите 2 (период отображения сокращен)? И вы хотите скрыть или показать эти пиксели?   -  person Kevin    schedule 09.03.2019
comment
Привет @Кевин. Привет, Кевин, мне нужны ячейки наземной сетки (бит 0, значение 1) с достаточным количеством данных (бит 1, значение 1) и сокращенным периодом отображения, если наблюдения ненадежны (бит 2, значение 1). И это пиксели, которые я хочу сохранить.   -  person geo_dd    schedule 11.03.2019
comment
Если я правильно понимаю, вы хотите сохранить пиксели, которые либо имеют (бит 0 значение 1 и бит 1 значение 1), либо (бит 0 значение 1, бит 1 значение 0 и бит 2 значение 1). Это правильно?   -  person Kevin    schedule 11.03.2019
comment
Привет @Kevin, из твоего сообщения я хочу сохранить пиксели с битом 0, значением 1 и битом 1, значением 1.   -  person geo_dd    schedule 11.03.2019


Ответы (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 имеют «значение 1 для бита 0 и значение 1 для бита 1».

Поскольку число 3 имеет двоичную форму 11 (значение бита 0 равно 1, а значение бита 1 равно 1), то qa.bitwiseAnd(3) превращает любой пиксель в полосе QA в одно из четырех значений:

  • значение 3, если QA пиксель имеет «значение бита 0 1 и значение бита 1 1» (например, 3, 7, 11, 15 и т. д.)

  • значение 2, если QA пиксель имеет «значение бита 0 0 и значение бита 1 1» (например, 2, 6, 10 и т. д.)

  • значение 1, если QA пиксель имеет «значение бита 0 1 и значение бита 1 0» (например, 1, 5, 9 и т. д.)

  • значение 0, если QA пиксель имеет «значение бита 0 0 и значение бита 1 0» (например, 0, 4, 8 и т. д.)

Часть .eq(3), как вы уже знаете, преобразует пиксели со значением 3 в 1, а остальные — в 0.

Надеюсь, это прояснит ваше замешательство по поводу «битов».

person Kevin    schedule 12.03.2019
comment
Уважаемый @Kevin, спасибо за ваш ответ. Это было хорошо объяснено. Тем не менее, я все еще запутался, как выбрать данное значение, так как в вашем коде использовалось значение 3. Какова логика выбора этого значения? Не могли бы вы расширить свой предыдущий ответ, чтобы включить этот выбор значения? - person Philipe Riskalla Leal; 08.04.2021
comment
Привет, Филипп, я считаю, что то, что вы хотите получить, определит, какое значение выбрать. Значение 3 было тем, что @geo_dd сказал мне в своем комментарии. @geo_dd был после пикселей с ячейкой сетки суши (соответствует значению 1 в бите 0) и достаточными достоверными данными (значение 1 в бите 1). Дополнительную информацию о значении каждого бита QA полосы из MODIS/006/MCD64A1 коллекции можно найти в редакторе кода. - person Kevin; 09.04.2021