Как умным способом получить в Google Earth Engine изображение разницы этого месяца и предыдущего месяца? - PullRequest
0 голосов
/ 05 марта 2020

Как с помощью интеллектуального способа получить разностное изображение этого месяца и предыдущего месяца в Google Earth Engine?

учебная зона 25E-75E , 5S-35N。

// study area 25E-75E,5S-35N。
var geometry = 
    ee.Geometry.Polygon(
         [[[25, 35],
           [25, 5],
           [75, 5],
           [75, 35]]], null, false);
var regions = ee.FeatureCollection([
    ee.Feature(geometry)
  ]);

// imgCol

var now = ee.Date(Date.now());
var NDVICollection=ee.ImageCollection('MODIS/006/MOD13Q1')
    .filterDate('2010-01-01',now)
    .filterBounds(regions)
    .select('NDVI'); 

var col = NDVICollection.map(function(img){
    return img.multiply(0.0001)
    .copyProperties(img,['system:time_start','system:time_end']);
    });

// grouped by month 
var months = ee.List([11,12,1,2]);
var byMonth = ee.ImageCollection.fromImages(
    months.map(function (m) {
        return col.filterDate('2019-11-01',now).filter(ee.Filter.calendarRange(m, m, 'month'))
                    .select('NDVI').mean()
                    .set('month', m);
    }));

mask

var meanNDVI = byMonth.reduce(ee.Reducer.mean());
var mask = meanNDVI.gt(0.1);

Создать разностное изображение

**var img12 = byMonth.filter(ee.Filter.eq('month', ee.Number(12))).first().updateMask(mask);
var img11 = byMonth.filter(ee.Filter.eq('month', ee.Number(11))).first().updateMask(mask);
var img1 = byMonth.filter(ee.Filter.eq('month', ee.Number(1))).first().updateMask(mask);
var img2 = byMonth.filter(ee.Filter.eq('month', ee.Number(2))).first().updateMask(mask);
var ndviChange_12 = img12.subtract(img11).set('name','ndviChange_12');
var ndviChange_1 = img1.subtract(img12).set('name','ndviChange_1');
var ndviChange_2 = img12.subtract(img1).set('name','ndviChange_2');
var ndviChange = ee.ImageCollection([ndviChange_12,ndviChange_1,ndviChange_2]);**

Я хочу сделать его намного умнее, что мне делать? сделать функцию или что-то еще?

Показать изображение

Map.centerObject(regions);
Map.addLayer(byMonth);
Map.addLayer(ndviChange);

1 Ответ

0 голосов
/ 01 апреля 2020

Я думаю, что решение состоит в том, чтобы использовать итерацию в вашей коллекции byMonth. Проверьте этот пример в документации. https://developers.google.com/earth-engine/ic_iterating

...