Как я могу найти все озера в регионе (ограниченном полигоном) в земном двигателе? - PullRequest
0 голосов
/ 19 июня 2019

Проблема в том, что задана интересующая область.

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

Я создал следующий код: Код двигателя Земли

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

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

1 Ответ

0 голосов
/ 01 июля 2019

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

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

Просто комментарий, я бы не назвал переменную коллекции изображений именем 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');
...