חישובים בטבלאות באמצעות Earth Engine REST API

הערה: ממשק REST API כולל תכונות חדשות ומתקדמות, שיכול להיות שלא יתאימו לכל המשתמשים. אם אתם חדשים ב-Earth Engine, כדאי להתחיל עם מדריך JavaScript.

במדריך למתחילים בנושא Earth Engine REST API מוסבר איך לגשת לבלוקים של פיקסלים מנכס של Earth Engine. בדוגמה של חישוב פיקסלים מוסבר איך להחיל חישוב על הפיקסלים לפני קבלת התוצאה. בדוגמה הזו מוצגת קבלת הממוצע של הפיקסלים בכל תמונה של ImageCollection בכל תכונה של FeatureCollection. ספציפית, זו בקשת POST לנקודת הקצה computeFeatures.

לפני שמתחילים

פועלים לפי ההוראות האלה כדי:

  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)

שליחת הבקשה

שליחת בקשת POST לנקודת הקצה computeFeatures. שימו לב שהבקשה מכילה את 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, שאפשר להשתמש בו באפליקציות או בתהליכים אחרים.