Python API для извлечения ближайших датированных данных SAR - PullRequest
0 голосов
/ 05 июля 2019

У меня есть javascript-код google Earth Engine для обнаружения пикселя воды на ближайших изображениях SAR.Ссылка кода: https://code.earthengine.google.com/0a35eea49123a5390b822bac7afc1b0c. Я могу запустить код в GEE и вернуть именно то, что мне нужно (1, если местоположение над водой, и 0, когда оно над землей).

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

import ee, datetime
ee.Initialize()
waterThresh = -16;
angle_threshold_1 = ee.Number(45.4);
angle_threshold_2 = ee.Number(31.66);

class AltimeterExtraction(object):
    def __init__(self, locationfile = './Bin/Location_Data.txt'):
        filecontent = open(locationfile, 'r')
        content = csv.DictReader(filecontent, delimiter='\t')

   def watertestpoint(self, lat=10.55587,lon=89.89789, date1='2019-04-05'):
        lat = ee.Number(lat)
        lon = ee.Number(lon)
        datep = datetime.datetime.strptime(date1, "%Y-%m-%d")
        date2 = datep + datetime.timedelta(days = -10)

        point = ee.Geometry.Point([lon,lat])

        S1 = ee.ImageCollection('COPERNICUS/S1_GRD').filterBounds(point).filterDate(date2, date1)
        S1 = S1.map(self.maskByAngle)
        S1 = S1.select('VV').median().rename('VV')
        S1 = S1.focal_median(50,'circle','meters').rename('VV')
        WaterMask = S1.lt(waterThresh)
        flag = WaterMask.reduceRegion(**{
            'reducer': ee.Reducer.mean(),
            'geometry': point,
            'scale': 10
        });

        return flag.get('VV')

    def maskByAngle(self, img):
        I = ee.Image(img)
        angle = I.select('angle')
        mask1 = angle.lt(angle_threshold_1)
        mask2 = angle.gt(angle_threshold_2)
        I = I.updateMask(mask1)
        return I.updateMask(mask2)


P = AltimeterExtraction()
x= P.watertestpoint()
print x

Есть ли способы получить единое значение вместо словаря из python?Мне нужен двоичный вывод (0 или 1) из функции.

1 Ответ

0 голосов
/ 15 июля 2019

Вы должны добавить .getInfo() во время печати, чтобы получить фактическое значение из этой точки.Earth Engine обрабатывает все данные на стороне сервера, поэтому вам необходимо явно вызвать .getInfo() для возврата информации.

Вот пример, который я использовал:

P = AltimeterExtraction() 
x= P.watertestpoint(lat=20.5564,lon=94.818,date1='2019-03-30') 
print(x.getInfo())
...