Я хочу отфильтровать и выбрать определенные изображения в коллекции в Google Earth Engine?
var l51990 = ee.ImageCollection('LANDSAT/LT5_L1T_TOA')
.filterBounds(table)
.filterDate('1990-01-01','2013-01-01')
.sort('CLOUD_COVER');
Я хотел бы выбрать изображение с наименьшей облачностью за год с 1990 по 2013 год.
Есть ли чистый способ сделать это, не повторяя этот блок кода снова и снова?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать first() для получения изображения или mosaic() для получения пикселей.
Есть ли чистый способ сделать это, не повторяя этот блок кода снова и снова?
да - используйте цикл for или while для повторения одного и того же блока кода столько раз, сколько вам нужно. Используйте переменные внутри цикла, чтобы определить параметры границы, дата и Сортировать (возможно, также включая значения lat и long)
Я не буду писать для вас рабочий код, но я помогу вам, если вы разместите свой собственный.
Вы должны выполнять временную фильтрацию для каждого года в рамках отображаемой функции по списку лет, из которых вы хотите получить изображение с наименьшей облачностью. Сначала выполните пространственную фильтрацию вне функции сопоставления, а затем выполните фильтрацию и захватите первое изображение в функции. В результате вы получите коллекцию изображений с наименьшим количеством облачных изображений за каждый год над вашей изучаемой областью.
var years = ee.List.sequence(1990,2013)
var l5 = ee.ImageCollection('LANDSAT/LT5_L1T_TOA').filterBounds(table)
var leastCloudy = ee.ImageCollection(years.map(function(i){
var t1 = ee.Date.fromYMD(i,1,1)
var t2 = t1.advance(1,'year')
return ee.Image(l5.filterDate(t1,t2).sort('CLOUD_COVER').first())
}))
print(leastCloudy)
После того, как у вас есть коллекция отфильтрованных изображений, вы можете выполнить любой анализ.