Earth Engine REST API를 사용한 테이블 계산

참고: REST API에는 일부 사용자에게 적합하지 않을 수 있는 새롭고 고급 기능이 포함되어 있습니다. Earth Engine을 처음 사용하는 경우 JavaScript 가이드로 시작하세요.

Earth Engine REST API 빠른 시작에서는 Earth Engine 애셋에서 픽셀 블록에 액세스하는 방법을 보여줍니다. 컴퓨팅 픽셀 예시는 결과를 얻기 전에 픽셀에 계산을 적용하는 방법을 보여줍니다. 이 예에서는 FeatureCollection의 각 특징에 있는 ImageCollection의 각 이미지에 있는 픽셀의 평균을 가져오는 방법을 보여줍니다. 구체적으로는 computeFeatures 엔드포인트에 대한 POST 요청입니다.

시작하기 전에

이 안내에 따라 다음 작업을 할 수 있습니다.

  1. Earth Engine 신청
  2. Google Cloud 프로젝트 만들기
  3. 프로젝트에서 Earth Engine API 사용 설정
  4. 서비스 계정 만들기
  5. 서비스 계정에 Earth Engine 계산을 실행할 수 있는 프로젝트 수준 권한 부여

참고: 이 튜토리얼을 완료하려면 Earth Engine 액세스 권한이 등록된 서비스 계정이 필요합니다. 계속하기 전에 이 안내를 참고하여 서비스 계정을 등록하세요.

Google Cloud에 인증

가장 먼저 해야 할 일은 Google Cloud에 인증된 요청을 할 수 있도록 로그인하는 것입니다. 이때 프로젝트도 설정합니다. 출력의 안내에 따라 로그인을 완료합니다.

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

!gcloud auth login --project {PROJECT}

서비스 계정의 비공개 키 파일 가져오기

Earth Engine을 사용하기 위해 등록된 서비스 계정이 이미 있어야 합니다. 계정이 없는 경우 이 안내에 따라 계정을 만드세요. 서비스 계정의 이메일 주소를 다음 셀에 복사합니다. (서비스 계정이 Earth Engine을 사용하도록 이미 등록되어 있어야 함) 다음 셀에서는 gsutil 명령줄을 사용하여 서비스 계정의 키 파일을 생성합니다. 키 파일이 노트북 VM에 생성됩니다.

# 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}

AuthorizedSession를 시작하고 사용자 인증 정보를 테스트합니다.

사용자 인증 정보를 가져오는 데 비공개 키를 사용하여 비공개 키를 테스트합니다. 사용자 인증 정보를 사용하여 HTTP 요청을 수행할 승인된 세션을 만듭니다. 세션을 통해 GET 요청을 실행하여 사용자 인증 정보가 작동하는지 확인합니다.

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))

계산 직렬화

무언가를 계산하도록 요청하려면 먼저 계산을 Earth Engine 표현식 그래프 형식으로 변환해야 합니다. 다음은 표현식 그래프를 가져오는 방법을 보여줍니다.

Earth Engine에 인증

서비스 계정에서 Earth Engine 범위가 지정된 사용자 인증 정보를 가져옵니다. 이를 사용하여 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)

계산 정의

클라이언트 API를 사용하여 간단한 계산을 프로토타입으로 만듭니다. 계산 결과는 FeatureCollection입니다. 오류 없이 계산이 성공할 수 있는지 확인하려면 첫 번째 Feature (다각형의 평균 NDVI)에서 값을 가져옵니다.

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

표현식 그래프 직렬화

이렇게 하면 Earth Engine 표현식 그래프 (특히 Expression)를 나타내는 객체가 생성됩니다. 일반적으로 클라이언트 API 중 하나를 사용하여 이러한 객체를 빌드해야 합니다.

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

요청 전송

computeFeatures 엔드포인트에 POST 요청을 실행합니다. 요청에는 직렬화된 계산인 Expression이 포함됩니다.

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))

대답에는 다른 앱이나 프로세스에서 사용할 수 있는 결과 FeatureCollection이 GeoJSON으로 포함됩니다.