Назначение функции для переименования полос в коллекции изображений в Google Earth Engine - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть функция для визуализации изображений разных дат.Однако мне нужно использовать оба LandSat 7 и 8, так как даты, которые я хочу, начинаются раньше, чем в 2013 году. Возникает проблема, что Lands 7 и 8 упорядочивают свои полосы по-разному, поэтому для визуализации изображений одинаковым образом потребуется другой код.Чтобы это исправить, я пытаюсь переименовать красные, зеленые, синие и NIR-полосы в коллекции изображений Landsat 7, чтобы они соответствовали Landsat 8. Таким образом, я могу написать универсальный код, который будет применяться к обоим изображениям из LandSat 7 и 8.Ниже приведен код, который я написал (предположим, что Landsat 7 был импортирован и называется «Landsat 7», а также импортируется геометрия, которая охватывает интересующую область, называемую «Bounds»).

// Function to rename landsat 7 bands to match landsat 8 bands
var adjustBands = function(landsat7){
   var adjust = ee.ImageCollection(landsat7)
   .filterDate('2010-01-01', '2010-05-01')
   .filterBounds(bounds).first();
   return adjust.select(['B4', 'B3', 'B2', 'B1'],['B5', 'B4', 'B3','B2']);
    }

print('adjust', adjustBands(landsat7));

//apply function to entire image collection
var l7a = landsat7.map(adjustBands);

Однако, когдаЯ запускаю код, я получаю сообщение об ошибке: Ошибка в карте (ID = LE07_001004_20000610): Image.select: требуется параметр 'input'.Любой совет?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы можете просто вызвать функцию .select() из коллекции изображений, где первый аргумент представляет собой список диапазонов, которые вы хотите выбрать, а второй аргумент представляет собой список для переименования диапазонов.

var adjustBands = landsat7.select(['B4', 'B3', 'B2', 'B1'],['B5', 'B4', 'B3','B2'])

Нет необходимости привязывать функцию к коллекции изображений для переименования полос, поскольку этот метод создаст ненужные издержки.

0 голосов
/ 25 сентября 2018

Похоже, вы отображаете функцию в коллекцию, но внутри функции, которую вы читаете в той же коллекции.При отображении функций на коллекции убедитесь, что сама функция принимает в качестве аргумента только одно изображение и возвращает одно изображение.Вот как я справляюсь с переименованием группы, если хочу объединить коллекции Landsat:

function renameBandsETM(image) {
    var bands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B7', 'pixel_qa'];
    var new_bands = ['B', 'G', 'R', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa'];
    return image.select(bands).rename(new_bands);
}
var etm = ee.ImageCollection('LANDSAT/LE07/C01/T1_SR')
  .map(renameBandsETM)

Затем я делаю то же самое с изображениями LC8, принимая во внимание другую систему именования полос:

function renameBandsOLI(image) {
    var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'pixel_qa'];
    var new_bands = ['B', 'G', 'R', 'NIR', 'SWIR1', 'SWIR2', 'pixel_qa'];
    return image.select(bands).rename(new_bands);
}
var oli = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
  .map(renameBandsOLI);

Затем вы можете объединить коллекции:

var landsat = ee.ImageCollection(etm.merge(oli));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...