Как я могу найти все озера в регионе (ограниченном полигоном) в Earth Engine?

Постановка задачи состоит в том, что задана область интереса.

Мне нужно найти все озера в области, ограниченной полигоном, по индексу NDWI для водоемов, находящихся на высоте более 1500м. Затем отобразите изменения площади поверхностных вод озера с 1984 по 2018 год на 2-летнем интервале в виде таблицы структуры в Google Earth Engine. Я использовал данные Landsat 5 и 7.

Я создал следующий код: код Earth Engine.

Теперь мне нужно отобразить результаты в отмеченной многоугольником области в виде таблицы в следующем формате: - Строки - (Озеро 1, Озеро 2, Озеро 3... Озеро n) Столбцы - (Площадь поверхности в 1984 г., Поверхность Площадь в 1986 г., ....2018 г.)

Как мне это сделать?


person Rudradeep Deb    schedule 19.06.2019    source источник
comment
Что вы пробовали? Подсказка: загрузите слой высот и используйте .where и .gt.   -  person blindjesse    schedule 24.06.2019
comment
Проверьте этот код и дайте несколько советов: - code.earthengine.google.com/bbbeee9dbb7b09b83c3cb155d24c1648   -  person Rudradeep Deb    schedule 27.06.2019
comment
@RudradeepDeb, вы должны обновить вопрос с кодом, который вы пробовали   -  person Rodrigo E. Principe    schedule 01.07.2019


Ответы (1)


Я отвечаю на этот вопрос в отношении кода, размещенного в комментариях, надеюсь, вопрос будет обновлен с помощью кода, размещенного в комментариях.

Фильтрация: ок.

Просто комментарий, я бы не назвал переменную коллекции изображений именем img, это меня просто сбивает с толку, но имена переменных на ваше усмотрение.

var mf = ee.Filter.calendarRange(10, 12, 'month');

var img1 = ee.ImageCollection(l5
            .filterDate('1984-01-01','1999-12-31')
            .filterBounds(roi)
            .filter(mf));

var img2 = ee.ImageCollection(l7
            .filterDate('2000-01-01','2018-12-31')
            .filterBounds(roi)
            .filter(mf));

добавить NDWI: это ваш код:

var addNDWI = function(image){
  var ndwi = image.normalizedDifference(['B2', 'B4']).rename('NDWI');
  var ndwiMask = ndwi.gte(0.3);
  return image.addBands(ndwi);
};
var image1 = img1.map(addNDWI);
var image2 = img2.map(addNDWI);

вы не сохраняете ndwiMask, поэтому вы не сможете использовать его вне этой функции. Опять же, я бы не назвал их image, так как это не изображения, а коллекции изображений.

маска возвышения: необходимо выбрать полосу elevation:

var elevMask = elevation.select('elevation').gt(1500)

Это изображение маски будет иметь те, где высота больше 1500, и нули, где нет.

применение масок: в этой части вы должны помнить, что Earth Engine использует функциональное программирование, поэтому объекты не изменяемы, это означает, что вы не можете обновить состояние объекта с помощью метода, вы должны поймать вывод метода, который вы вызываете. Здесь вам нужна маска ndwi, поэтому вам нужно вычислить ее с полосой NDWI.

var mask = function(image){
  var ndwiMask = image.select('NDWI').gt(0.3)
  var ndwi_masked = image.updateMask(ndwiMask);
  return ndwi_masked.updateMask(elevMask);
};

var maskedImg = image1.map(mask);  // ImageCollection!
var maskedImg2 = image2.map(mask);  // ImageCollection!

Визуализация: так как результаты ImageCollection, когда вы добавляете его на карту, EE создает мозаику, и это то, что вы увидите. Имейте это в виду для дальнейшей обработки.

var ndwiViz = {bands: ['NDWI'], min: 0.5, max: 1, palette: ['00FFFF', '0000FF']};
Map.addLayer(maskedImg, ndwiViz, 'Landsat 5 masked collection');
person Rodrigo E. Principe    schedule 01.07.2019
comment
Немного обновил код. Также добавлена ​​обновленная ссылка на код в вопросе. Теперь мне нужно отобразить изменения площади поверхностных вод озера с 1984 по 2018 год на 2-летнем интервале в виде таблицы, похожей на структуру в Earth Engine. Также не могли бы вы проверить отображение на карте? - person Rudradeep Deb; 02.07.2019
comment
но это ответ на исходный вопрос ?? вы не должны обновлять вопрос, создавая новый вопрос. Сохраните исходный вопрос здесь и сделайте еще один пост, если потребуется. - person Rodrigo E. Principe; 02.07.2019
comment
Вот новый вопрос: stackoverflow.com/q/56862920/9937666. Пожалуйста, проверьте это. - person Rudradeep Deb; 03.07.2019