הערה: ממשק REST API כולל תכונות חדשות ומתקדמות, שיכול להיות שלא יתאימו לכל המשתמשים. אם אתם חדשים ב-Earth Engine, כדאי להתחיל עם מדריך JavaScript.
במדריך למתחילים בנושא Earth Engine REST API מוסבר איך לגשת לבלוקים של פיקסלים מנכס של Earth Engine. נניח שרוצים להחיל חישוב על הפיקסלים לפני קבלת התוצאה. במדריך הזה מוסבר איך ליצור אב טיפוס של חישוב באמצעות אחת מספריות הלקוח, לבצע סריאליזציה של גרף החישוב ולהשתמש ב-REST API כדי לקבל את התוצאה של החישוב. שליחת בקשות למחשוב דרך ה-API ל-REST מקבילה לבקשת POST
לאחת מנקודות הקצה של המחשוב, לדוגמה computePixels
, computeFeatures
או value.compute
. באופן ספציפי, בדוגמה הזו מוצג איך מקבלים תמונה מורכבת של נתוני Sentinel-2 באזור קטן.
לפני שמתחילים
פועלים לפי ההוראות האלה כדי:
- הגשת בקשה ל-Earth Engine
- יצירת פרויקט של Google Cloud
- הפעלת Earth Engine API בפרויקט
- יצירה של חשבון שירות
- הענקת הרשאה ברמת הפרויקט לחשבון השירות לבצע חישובים ב-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 של הלקוח. חשוב לשים לב שתוצאת החישוב היא Image
.
coords = [
-121.58626826832939,
38.059141484827485,
]
region = ee.Geometry.Point(coords)
collection = ee.ImageCollection('COPERNICUS/S2')
collection = collection.filterBounds(region)
collection = collection.filterDate('2020-04-01', '2020-09-01')
image = collection.median()
סריאליזציה של גרף הביטוי
הפעולה הזו תיצור אובייקט שמייצג את גרף הביטוי של Earth Engine (במיוחד, Expression
). בדרך כלל, כדאי ליצור את הגרפים האלה באמצעות אחד מממשקי הלקוח של ה-API.
serialized = ee.serializer.encode(image)
יוצרים את ההיטל הרצוי (WGS84) בקנה מידה הרצוי (10 מטרים ל-Sentinel-2). הפעולה הזו נועדה רק כדי לגלות את קנה המידה הרצוי במעלות, שהן יחידות ההטלה. הסולמות האלה ישמשו לציון ההעתקה האפינית בבקשה.
# Make a projection to discover the scale in degrees.
proj = ee.Projection('EPSG:4326').atScale(10).getInfo()
# Get scales out of the transform.
scale_x = proj['transform'][0]
scale_y = -proj['transform'][4]
שליחת הבקשה
שליחת בקשת POST
לנקודת הקצה computePixels
. שימו לב שהבקשה מכילה את Expression
, שהוא החישוב שעבר סריאליזציה. הוא מכיל גם PixelGrid
. השדה PixelGrid
מכיל את dimensions
של הפלט הרצוי ואת AffineTransform
ביחידות של מערכת הקואורדינטות המבוקשת. כאן מערכת הקואורדינטות היא גיאוגרפית, ולכן הטרנספורמציה מצוינת עם קנה מידה במעלות וקואורדינטות גיאוגרפיות של הפינה השמאלית העליונה של תיקון התמונה המבוקש.
import json
url = 'https://earthengine.googleapis.com/v1beta/projects/{}/image:computePixels'
url = url.format(PROJECT)
response = session.post(
url=url,
data=json.dumps({
'expression': serialized,
'fileFormat': 'PNG',
'bandIds': ['B4','B3','B2'],
'grid': {
'dimensions': {
'width': 640,
'height': 640
},
'affineTransform': {
'scaleX': scale_x,
'shearX': 0,
'translateX': coords[0],
'shearY': 0,
'scaleY': scale_y,
'translateY': coords[1]
},
'crsCode': 'EPSG:4326',
},
'visualizationOptions': {'ranges': [{'min': 0, 'max': 3000}]},
})
)
image_content = response.content
אם מריצים את הפקודה הזו במחברת, אפשר להציג את התוצאות באמצעות הווידג'ט IPython
להצגת תמונות.
# Import the Image function from the IPython.display module.
from IPython.display import Image
Image(image_content)