Реклассифицируйте все значения пикселей во всех изображениях в коллекции изображений - GEE - PullRequest
0 голосов
/ 06 августа 2020

Я новичок в GEE, поэтому ответ на этот вопрос может быть простым для большинства из вас. Я ищу способ переклассифицировать значения пикселей во всех изображениях в коллекции изображений. Я работаю с данными месячной истории из набора глобальных данных о поверхностных водах и ориентируюсь на месяцы март-май. В настоящее время пиксели воды имеют значение 2, пиксели без воды - 1, а пиксели без выборки (нет данных) - 0. Я хотел бы переклассифицировать так, чтобы вода = 1, а не вода = 0, и все остальное. остальное замаскировано. Мой код ниже:

var dataset = ee.ImageCollection('JRC/GSW1_2/MonthlyHistory')
.filterBounds(roi)
.map(function(image){return image.clip(roi)})
.filter(ee.Filter.calendarRange(3, 5, 'month'));
print(dataset);

Это часть, которая не работает ...

var reclassified = function(img) {
  return img.remap(([2, 1], [1, 0]), 'water');
};
var new_ds = dataset.map(reclassified)
print(new_ds);

1 Ответ

0 голосов
/ 07 августа 2020

У вас есть дополнительный набор круглых скобок:

  return img.remap(([2, 1], [1, 0]), 'water');
                   ^              ^

Эффект от этой ошибки заключается в том, чтобы продолжить работу, как если бы вы написали img.remap([1, 0], 'water'), что не удается, потому что 'water' не может быть преобразовано в список.

Есть еще одна проблема: когда вы не используете форму именованных параметров, вам нужно записать все аргументы до последнего необязательного аргумента, который вы хотите указать. Список параметров remap(from, to, <i>defaultValue, bandName</i>), поэтому вам нужно написать значение по умолчанию, даже если оно вам не нужно. В вызовах API Earth Engine вы можете использовать null для любого необязательного параметра, который вы не хотите указывать:

  return img.remap([2, 1], [1, 0], null, 'water');

Или вы можете использовать именованные аргументы для того же результата:

  return img.remap({
    from: [2, 1],
    to: [1, 0],
    bandName: 'water'
  });

Или, поскольку в данном конкретном случае ваше изображение содержит только одну полосу, вы можете полностью исключить bandName:

  return img.remap([2, 1], [1, 0]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...