Как создать временной ряд (NDVI) для каждого многоугольника, содержащегося в коллекции объектов в движке Google Планета Земля? - PullRequest
2 голосов
/ 17 мая 2019

У меня есть коллекция изображений Landsat 5 и коллекция объектов с тысячами полигонов и точек (в примере у меня только три).Я хотел бы вычислить среднее значение NDVI (и NDWI) для каждого многоугольника с течением времени, как если бы я использовал: ui.Chart.image.series ;

Если я тестирую только один многоугольникс этим кодом:

var p1= ee.Geometry.Point([-78.55995626672507,35.05443673532838])
var pol = ee.Geometry.Polygon([[[-78.57239414626946,35.01247143741747], 
[-78.57186843330254,35.012559309453266], 
[-78.57199717933526,35.01277020195395], 
[-78.57253362113823,35.01272626606113],
[-78.57239414626946,35.01247143741747]
]]);

var ens = [
ee.Feature(pol, {name: 'Thiessen'})
];

var col =  ee.FeatureCollection(ens)
print(col)

// NDVI: B4 and B3
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI');
return image.addBands(ndvi);
};

// Apply the cloud mask and NDVI function to Landsat 5 imagery and   print the chart
 var l5 = ee.ImageCollection("LANDSAT/LT05/C01/T1_TOA")
      .filter(ee.Filter.calendarRange(1985,2007,'year'))
      .filter(ee.Filter.calendarRange(1,1,'month'))
      .filterBounds(p1)
      .map(addNDVI) 

print(ui.Chart.image.series(l5.select('NDVI'), col, ee.Reducer.mean(), 30));

С этим кодом я получил эту цифру .Я хотел бы получить фигуру одного типа с несколькими многоугольниками (одна фигура содержит все временные ряды многоугольников).

Я пробовал этот код:

var p1= ee.Geometry.Point([-78.55995626672507,35.05443673532838])
var p2= ee.Geometry.Point([-78.5725093420931,35.05908805245044])
var pol = ee.Geometry.Polygon([[[-78.57239414626946,35.01247143741747], 
[-78.57186843330254,35.012559309453266], 
[-78.57199717933526,35.01277020195395], 
[-78.57253362113823,35.01272626606113],
[-78.57239414626946,35.01247143741747]
]]);

var ens = [
ee.Feature(p2, {name: 'Thiessen'}),
ee.Feature(pol, {name: 'Thiessen'})
];

var col =  ee.FeatureCollection(ens)
print(col)

// NDVI: B4 and B3
var addNDVI = function(image) {
var ndvi = image.normalizedDifference(['B4', 'B3']).rename('NDVI');
return image.addBands(ndvi);
};

// Apply the cloud mask and NDVI function to Landsat 5 imagery and    print the chart
var l5 = ee.ImageCollection("LANDSAT/LT05/C01/T1_TOA")
      .filter(ee.Filter.calendarRange(1985,2007,'year'))
      .filter(ee.Filter.calendarRange(1,1,'month'))
      .filterBounds(p1)
      .map(addNDVI) 

//Create a graph of the time-series.
var graph = ui.Chart.image.seriesByRegion({
imageCollection: l5, 
regions: col, 
reducer: ee.Reducer.mean(),
scale: 30,
})
print(graph)

Этот код предоставляет эта цифра

Последний код представляет график так, как мне бы хотелось.Однако он не вычисляет то, что я хочу.Для полигона pol у меня должны быть одинаковые графики с двумя кодами, что не так.Как я мог сделать то же самое вычисление, сделанное с кодом 1, но представленное как код 2?

1 Ответ

0 голосов
/ 18 мая 2019

Вам нужно добавить аргумент 'band' ко второму вызову, например:

var graph = ui.Chart.image.seriesByRegion({
  imageCollection: l5, 
  regions: col, 
  band: 'NDVI',
  reducer: ee.Reducer.mean(),
  scale: 30,
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...