محاسبات جدول با Earth Engine REST API

توجه: REST API حاوی ویژگی‌های جدید و پیشرفته‌ای است که ممکن است برای همه کاربران مناسب نباشد. اگر تازه با Earth Engine آشنا شده‌اید، لطفاً با راهنمای جاوا اسکریپت شروع کنید.

شروع سریع 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)

تعریف کردن محاسبه

نمونه اولیه محاسبات ساده با میانای برنامه‌سازی کاربردی کارخواه. توجه داشته باشید که نتیجه محاسبه 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/061/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) را نشان می‌دهد. به‌طور کلی، باید این‌ها را با یکی از میاناهای برنامه‌سازی کاربردی کارخواه بسازید.

# 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 است که می‌تواند توسط برنامه‌ها یا فرایندهای دیگر مصرف شود.