Выходное значение определенной точки широты и долготы в Python

Из-за моего сокращенного объяснения я редактирую этот вопрос 20 января 2020 г. Извините за ответ оригинала.

Мне нужно значение отражательной способности TOA определенного диапазона широты/долготы. Я мог бы сделать это с помощью javascript с помощью приведенного ниже кода, но я не мог сделать то же самое с python. Буду рад вашей помощи в будущем.

var start = '2018-01-01'
var end = '2018-01-16'
var lon =  134.01
var lat = 34.04
var p = ee.Geometry.Point(lon, lat) 

var imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
  .filterDate(start, end) 
  .filterBounds(p) 

var im1 = imageCollection
  .first()
var image = ee.Image(im1);

// Extract the data 
var data_b1 = im1.select("B1").reduceRegion(ee.Reducer.mean(),p,10).get("B1")
print('B1 T1_TOA: ', data_b1)

Вывод Javascript - это отражение TOA:

B1 T1_TOA: 
0.25892749428749084

Но в Python это работает не очень хорошо. Результатом является ComputedObject, но он не содержит значения отражательной способности TOA.

import ee
ee.Initialize()

start = '2018-01-01'
end = '2018-01-16'
lon = 134.01
lat = 34.04
p = ee.Geometry.Point([lon, lat])

imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').filterDate(start, end).filterBounds(p)
im1 = imageCollection.first()
data_b1 = im1.select("B1").reduceRegion(ee.Reducer.mean(),p,10).get("B1")

print(data_b1)

Выходные данные ниже json, не включая значение коэффициента отражения TOA «0,25892749428749084»:

ee.ComputedObject({
  "type": "Invocation",
  "arguments": {
    "dictionary": {
      "type": "Invocation",
      "arguments": {
        "image": {
          "type": "Invocation",
          "arguments": {
            "input": {
              "type": "Invocation",
              "arguments": {
                "collection": {
                  "type": "Invocation",
                  "arguments": {
                    "collection": {
                      "type": "Invocation",
                      "arguments": {
                        "collection": {
                          "type": "Invocation",
                          "arguments": {
                            "id": "LANDSAT/LC08/C01/T1_TOA"
                          },
                          "functionName": "ImageCollection.load"
                        },
                        "filter": {
                          "type": "Invocation",
                          "arguments": {
                            "rightField": "system:time_start",
                            "leftValue": {
                              "type": "Invocation",
                              "arguments": {
                                "start": "2018-01-01",
                                "end": "2018-01-16"
                              },
                              "functionName": "DateRange"
                            }
                          },
                          "functionName": "Filter.dateRangeContains"
                        }
                      },
                      "functionName": "Collection.filter"
                    },
                    "filter": {
                      "type": "Invocation",
                      "arguments": {
                        "leftField": ".all",
                        "rightValue": {
                          "type": "Invocation",
                          "arguments": {
                            "geometry": {
                              "type": "Point",
                              "coordinates": [
                                134.01,
                                34.04
                              ]
                            }
                          },
                          "functionName": "Feature"
                        }
                      },
                      "functionName": "Filter.intersects"
                    }
                  },
                  "functionName": "Collection.filter"
                }
              },
              "functionName": "Collection.first"
            },
            "bandSelectors": [
              "B1"
            ]
          },
          "functionName": "Image.select"
        },
        "reducer": {
          "type": "Invocation",
          "arguments": {},
          "functionName": "Reducer.mean"
        },
        "geometry": {
          "type": "Point",
          "coordinates": [
            134.01,
            34.04
          ]
        },
        "scale": 10
      },
      "functionName": "Image.reduceRegion"
    },
    "key": "B1"
  },
  "functionName": "Dictionary.get"
})

person Kamoriq    schedule 17.01.2020    source источник
comment
Каков результат работы программы? Какая ошибка произошла?   -  person mrEvgenX    schedule 17.01.2020
comment
Добро пожаловать в Stack Overflow! Люди здесь готовы помочь ответить на вопросы, но вам нужно предоставить немного больше информации. Например, какой результат вы получаете? Какой результат вы ожидаете? Что еще вы пробовали? Что происходит, когда вы запускаете эту программу построчно в интерактивном интерпретаторе Python?   -  person Jim DeLaHunt    schedule 17.01.2020
comment
Как и в консоли javascript GEE, с клиентом python вы просто создаете объект JSON на стороне client. Ничего не произойдет, пока вы не отправите его на сервер для оценки. В вашем случае вам нужно вызвать .getInfo() для конечного объекта data_b1. Дополнительная информация: обзор концепций GEE   -  person Val    schedule 21.01.2020
comment
Примечание. Будущие вопросы по Earth Engine направляйте на GIS Stack Exchange (тег google-earth-engine). чтобы помочь объединить вопросы для более легкого обнаружения и взаимодействия с сообществом EE.   -  person Justin Braaten    schedule 22.01.2020


Ответы (2)


Вам необходимо преобразовать объект на стороне сервера в объект на стороне клиента. Пытаться:

print(data_b1.getInfo())

Дополнительную информацию о печати объектов Earth Engine с помощью Python API см. в этом руководстве.

person Justin Braaten    schedule 22.01.2020
comment
Я понял! Благодарю вас! - person Kamoriq; 24.01.2020

Я слежу за тем, что ваш код Python работает. Сначала я регистрируюсь в Google Earth Engine по этой ссылке https://earthengine.google.com. Затем я устанавливаю пакет earthengine-api в Google Colab. Когда вы выполните код, вы увидите сообщение с просьбой разрешить доступ, необходимый для Earth Engine. Пожалуйста, следуйте инструкциям.

Код Python:

import ee

# Trigger the authentication flow.
ee.Authenticate()

# Initialize the library.
ee.Initialize()

lat = 35.1000
lon = 135.2000
p = ee.Geometry.Point([lon, lat])
start = '2017-11-21'
end = '2017-12-30'
imageCollection = ee.ImageCollection('LANDSAT/LC08/C01/T1').filterDate(start, end).filterBounds(p)
im1 = imageCollection.sort('CLOUD_COVER', True).first()
data_b1 = im1.select("B1").reduceRegion(ee.Reducer.mean(),p,10).get("B1")

print(data_b1)

Пример подсказки сообщения при выполнении кода.

введите здесь описание изображения

Выходной результат.

введите здесь описание изображения

person Neda Peyrone    schedule 17.01.2020