Фильтрация Google Earth Engine

Я хочу отфильтровать и выбрать определенные изображения в коллекции в 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 год.

Есть ли чистый способ сделать это, не повторяя этот блок кода снова и снова?


person Keith Paolo Landicho    schedule 28.07.2018    source источник


Ответы (3)


Вы можете использовать first() для получения изображения или mosaic() для получения пикселей.

person Nicholas Clinton    schedule 30.07.2018

Есть ли чистый способ сделать это, не повторяя этот блок кода снова и снова?

Да - используйте цикл for или while для повторения одного и того же блока кода столько раз, сколько вам нужно. Используйте переменные внутри цикла для определения параметров bounds, date и sort (возможно, также включая значения широты и долготы)

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

person Mark    schedule 30.07.2018

Вы должны выполнять временную фильтрацию для каждого года в рамках отображаемой функции по списку лет, по которым вы хотите получить изображение с наименьшей облачностью. Сначала выполните пространственную фильтрацию вне функции сопоставления, а затем выполните фильтрацию и захватите первое изображение в функции. В результате вы получите коллекцию изображений с наименьшим количеством облачных изображений за каждый год над вашей изучаемой областью.

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)

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

person Kel Markert    schedule 21.08.2018