GEE Python API: не удается экспортировать изображение на Google Диск

Используя GEE Python API в приложении, работающем с App Engine (на локальном хосте), я пытаюсь экспортировать изображение в файл на Google Диске. Кажется, что задача запускается и завершается успешно, но файл на Google Диске не создается.

Я попытался выполнить эквивалентный код javascript в редакторе кода GEE, и это работает, файл создается на Google Диске. В python я пробовал разные способы запустить задачу, но всегда давал один и тот же результат: задача завершается, но файл не создается.

Мой код на Python выглядит следующим образом:

landsat = ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_123032_20140515').select(['B4', 'B3', 'B2'])

geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236])

task_config = {
    'description': 'TEST_todrive_desc',
    'scale': 30,  
    'region': geometry,
    'folder':'GEEtest'
}

task = ee.batch.Export.image.toDrive(landsat, 'TEST_todrive', task_config)
ee.batch.data.startProcessing(task.id, task.config)
# Note: I also tried task.start() instead of this last line but the problem is the same, task completed, no file created. 

# Printing the task list successively 
for i in range(10): 
    tasks = ee.batch.Task.list()
    print(tasks)
    time.sleep(5)

В распечатанном списке задач состояние задачи меняется с ГОТОВА на ВЫПОЛНЯЕТСЯ, а затем ЗАВЕРШЕНО. Но после завершения на Google Диске в моей папке "GEEtest" (и где-либо еще) файл не создается.

Что я делаю неправильно?


person Particimon    schedule 27.04.2019    source источник
comment
ты когда-нибудь в этом догадывался? У меня аналогичная проблема при экспорте в Google Cloud Bucket.   -  person Vincent    schedule 04.03.2020


Ответы (2)


Вы не можете передать словарь аргументов непосредственно в Python. Вам нужно передать его, используя соглашение kwargs (для получения дополнительной информации выполните поиск в Интернете). По сути, вам просто нужно поставить перед аргументом task_config двойные звездочки, например:

task = ee.batch.Export.image.toDrive(landsat, 'TEST_todrive', **task_config)

Затем продолжайте, как и вы (я предполагаю, что ваше использование task.config, а не task_config в следующей строке является опечаткой). Также обратите внимание, что вы можете запросить задачу напрямую (используя, например, task.status()), и это может дать больше информации о том, когда и почему задача не удалась. Насколько я могу судить, это плохо документировано, но вы можете прочитать об этом в код API.

person blindjesse    schedule 27.04.2019

Я думаю, что файл был сгенерирован и сохранен на диске Google «Учетной записи службы», используемой для Python API, а не в вашей частной учетной записи, которая обычно используется при использовании редактора веб-кода.

person Ehsan    schedule 21.04.2021