2017-02-14 4 views
0

Google 어스 엔진 (Python API,하지만 별 문제는 아니지만)으로 작업하고 있습니다. 컬렉션의 모든 단일 이미지에 대해 Region별로 축소해야하는 ImageCollection이 있습니다.Google EarthEngine : reduceRegion에 대한 시계열 얻기

EarthEngine에 대한 단일 요청으로 .reduceRegion에 대한 시계열을 얻을 수있는 방법이 있습니까? 지금까지 나는 .reduceRegion ('mean', feature)이 이미지에서만 작동한다는 것을 알았습니다. collection.reduceRegion ('mean', feature)에 상응하는 것이 필요합니다 - 존재하지 않습니다 - 매 시간 단계마다 값의 목록을 가져 오는 것을 목표로합니다.

근본적인 문제는 시간 계열을 생성하는 동안 EE 요청 제한 (초당 3 회)을 실행 중입니다. 또한 모든 단일 값에 대한 요청을 발행하는 것은 매우 느립니다.

컬렉션에 적합한 감속기를 만드는 방법이 있습니까? 콜렉션 축소 기가 이미지를 반환해야하기 때문에 (pls가 틀렸다면 알려주십시오.) 예를 들어 상상할 수 있습니다. 원하는 값을 가진 픽셀이 하나 뿐인 입력 컬렉션에서 이미지 당 하나의 밴드가있는 이미지를 만듭니다.

도움 주셔서 감사합니다.

+0

따라서 컬렉션의 각 이미지에 감속기의 결과가 포함 된 목록이 필요합니다. 그게 맞습니까? [0.2, 0.5, 0.8, 0.7] 같은 것? –

+0

맞습니다. 가급적 계곡을 이미지와 다시 연관시키는 방법이 있습니다. 그러나 나는 스스로 주문을 추적 할 수 있다고 생각한다. –

답변

1

다음은 접근 방법입니다. null 값

# -*- 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() 

이 다른 스크립트없이 당신이 사전을 얻을이 스크립트에서

당신은 null 값을 얻는다. 이 스크립트에는 -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

노력해 주셔서 감사합니다. 곧 평가 될 것입니다. –