2017-02-14 2 views
0

Я работаю с Google EarthEngine (API Python, но это не имеет особого значения). У меня есть ImageCollection, который мне нужно уменьшить по региону для каждого отдельного изображения в коллекции.Google EarthEngine: Получение временных рядов для reduceRegion

Есть ли способ получить временной ряд для .reduceRegion с единственным запросом на EarthEngine. До сих пор я понял, что .reduceRegion ('mean', feature) работает только на изображениях. Мне нужен эквивалент collection.reduceRegion ('mean', feature) - которого не существует - с целью получить список значений для каждого временного шага.

Основная проблема заключается в том, что я запускаю ограничение на запрос EE (3 в секунду) при создании моего временного ряда. Кроме того, очень медленно выдавать запрос для каждого отдельного значения.

Есть ли способ построить подходящий редуктор для коллекций. Поскольку редукторы коллекции должны возвращать изображения (скажите мне, если это неверно), я мог бы представить, например. для создания изображения с одной полосой на изображение в коллекции ввода, которая имеет только один пиксель с требуемым значением.

Благодарим за помощь.

+0

Итак, вам нужен список с результатами редуктора в каждом изображении коллекции. Это правильно? что-то вроде [0,2, 0,5, 0,8, 0,7]? –

+0

Это правильно. Предпочтительно каким-либо образом связать долину с изображением. Но я думаю, я мог бы следить за порядком. –

ответ

1

Вот такой подход.

В этом сценарии вы получаете словарь без нулевых значений

# -*- coding: utf-8 -*- 
""" 
Created on Tue Mar 14 11:21:09 2017 

@author: Gennadii 
""" 
import ee 
ee.Initialize() 

geometry = ee.Geometry.Polygon([[[-71.54365539550781, -43.07340216393553], 
      [-71.5484619140625, -43.11050787253287], 
      [-71.488037109375, -43.125043167401266], 
      [-71.48460388183594, -43.0754084526532]]]) 

def calcMean(img): 
    # gets the mean NDVI for the area in this img 
    mean = img.reduceRegion(ee.Reducer.mean(), geometry, 30).get('NDVI') 

    # sets the date and the mean NDVI as a property of the image 
    return img.set('date', img.date().format()).set('mean', mean) 

# Applies calcMean() in the collection 
col = ee.ImageCollection("LANDSAT/LC8_L1T_8DAY_NDVI").filterDate("2014-01-01","2014-03-31").map(calcMean) 

# Reduces the images properties to a list of lists 
values = col.reduceColumns(ee.Reducer.toList(2), ['date', 'mean']).values().get(0) 

# Type casts the result into a List 
lista = ee.List(values) 

# Converts the list of lists to a Dictionaty 
means = ee.Dictionary(lista.flatten()) 
print "Dictionary of means:", means.getInfo() 

и этого другого скрипта вы получите также нулевые значения. Они заполнены -10 в этом скрипте, но вы можете изменить это на все, что вам нужно. Это может быть 0 или строка.

# -*- coding: utf-8 -*- 
""" 
Created on Tue Mar 14 11:17:29 2017 

@author: Rodrigo E. Principe 
""" 
import ee 
ee.Initialize() 

geometry = ee.Geometry.Polygon([[[-71.54365539550781, -43.07340216393553], 
      [-71.5484619140625, -43.11050787253287], 
      [-71.488037109375, -43.125043167401266], 
      [-71.48460388183594, -43.0754084526532]]]) 

col = ee.ImageCollection("LANDSAT/LC8_L1T_8DAY_NDVI").filterDate("2014-01-01","2014-03-31") 

# Initial empty Dictionary 
meansIni = ee.Dictionary() 

def calcMean(img, first): 

    #gets the year of the image 
    year = img.date().format() 

    #gets the NDVI 
    nd = ee.Image(img).reduceRegion(ee.Reducer.mean(),geometry,30).get("NDVI") 

    #Checks for null values and fills them with whatever suits you (-10 is just an option) 
    ndvi = ee.Algorithms.If(ee.Algorithms.IsEqual(nd, None), -10, nd) 

    #fills the Dictionary 
    return ee.Dictionary(first).set(year, ndvi) 

# Apply calcMean() to the collection 
means = ee.Dictionary(col.iterate(calcMean, meansIni)) 

print "Dictionary of means:", means.getInfo() 
+0

Спасибо за внимание. Скоро оценят. –

 Смежные вопросы

  • Нет связанных вопросов^_^