Cálculos de tablas con la API de REST de Earth Engine

Nota: La API de REST contiene funciones nuevas y avanzadas que tal vez no sean adecuadas para todos los usuarios. Si es la primera vez que usas Earth Engine, comienza con la guía de JavaScript.

En la guía de inicio rápido de la API de REST de Earth Engine, se muestra cómo acceder a bloques de píxeles desde un recurso de Earth Engine. En el ejemplo de píxeles de procesamiento, se muestra cómo aplicar un cálculo a los píxeles antes de obtener el resultado. En este ejemplo, se muestra cómo obtener la media de los píxeles de cada imagen de un ImageCollection en cada atributo de un FeatureCollection. Específicamente, se trata de una solicitud POST al extremo computeFeatures.

Antes de comenzar

Sigue estas instrucciones para hacer lo siguiente:

  1. Postúlate para usar Earth Engine
  2. Crea un proyecto de Google Cloud
  3. Habilita la API de Earth Engine en el proyecto
  4. Crea una cuenta de servicio
  5. Otorga permiso a nivel del proyecto a la cuenta de servicio para realizar cálculos de Earth Engine

Nota: Para completar este instructivo, necesitarás una cuenta de servicio registrada para acceder a Earth Engine. Consulta estas instrucciones para registrar una cuenta de servicio antes de continuar.

Autentica en Google Cloud

Lo primero que debes hacer es acceder para poder realizar solicitudes autenticadas a Google Cloud. Configurarás el proyecto al mismo tiempo. Sigue las instrucciones que se muestran en el resultado para completar el acceso.

# INSERT YOUR PROJECT HERE
PROJECT = 'your-project'

!gcloud auth login --project {PROJECT}

Obtén un archivo de claves privadas para tu cuenta de servicio

Ya deberías tener una cuenta de servicio registrada para usar Earth Engine. Si no tienes una, sigue estas instrucciones para obtenerla. Copia la dirección de correo electrónico de tu cuenta de servicio en la siguiente celda. (La cuenta de servicio ya debe estar registrada para usar Earth Engine). En la siguiente celda, se usa la línea de comandos de gsutil para generar un archivo de claves para la cuenta de servicio. El archivo de claves se creará en la VM del notebook.

# INSERT YOUR SERVICE ACCOUNT HERE
SERVICE_ACCOUNT='your-service-account@your-project.iam.gserviceaccount.com'
KEY = 'key.json'

!gcloud iam service-accounts keys create {KEY} --iam-account {SERVICE_ACCOUNT}

Inicia un AuthorizedSession y prueba tus credenciales

Prueba la clave privada usándola para obtener credenciales. Usa las credenciales para crear una sesión autorizada y realizar solicitudes HTTP. Realiza una solicitud GET a través de la sesión para verificar que las credenciales funcionen.

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account

credentials = service_account.Credentials.from_service_account_file(KEY)
scoped_credentials = credentials.with_scopes(
    ['https://www.googleapis.com/auth/cloud-platform'])

session = AuthorizedSession(scoped_credentials)

url = 'https://earthengine.googleapis.com/v1beta/projects/earthengine-public/assets/LANDSAT'

response = session.get(url)

from pprint import pprint
import json
pprint(json.loads(response.content))

Cómo serializar un cálculo

Antes de que puedas enviar una solicitud para calcular algo, el cálculo debe colocarse en el formato de gráfico de expresión de Earth Engine. En el siguiente ejemplo, se muestra cómo obtener el gráfico de expresión.

Autenticación en Earth Engine

Obtén credenciales con alcance de Earth Engine desde la cuenta de servicio. Úsalos para inicializar Earth Engine.

import ee

# Get some new credentials since the other ones are cloud scope.
ee_creds = ee.ServiceAccountCredentials(SERVICE_ACCOUNT, KEY)
ee.Initialize(ee_creds)

Cómo definir un cálculo

Crea un prototipo de un cálculo simple con la API de cliente. Ten en cuenta que el resultado del cálculo es un FeatureCollection. Para verificar que el cálculo se pueda realizar sin errores, obtén un valor del primer Feature (el NDVI medio en el polígono).

# A collection of polygons.
states = ee.FeatureCollection('TIGER/2018/States')
maine = states.filter(ee.Filter.eq('NAME', 'Maine'))

# Imagery: NDVI vegetation index from MODIS.
band = 'NDVI'
images = ee.ImageCollection('MODIS/006/MOD13Q1').select(band)
image = images.first()

computation = image.reduceRegions(
  collection=maine, 
  reducer=ee.Reducer.mean().setOutputs([band]), 
  scale=image.projection().nominalScale()
)

# Print the value to test.
print(computation.first().get(band).getInfo())

Serializa el gráfico de expresión

Esto creará un objeto que representa el gráfico de expresión de Earth Engine (específicamente, un Expression). En general, debes compilar estos objetos con una de las APIs cliente.

# Serialize the computation.
serialized = ee.serializer.encode(computation)

Envía la solicitud

Realiza una solicitud POST al extremo computeFeatures. Ten en cuenta que la solicitud contiene Expression, que es el cálculo serializado.

import json

url = 'https://earthengine.googleapis.com/v1beta/projects/{}/table:computeFeatures'

response = session.post(
  url = url.format(PROJECT),
  data = json.dumps({'expression': serialized})
)

import json
pprint(json.loads(response.content))

La respuesta contiene el FeatureCollection resultante como GeoJSON, que pueden usar otras apps o procesos.