محاسبات جدول با 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 استفاده کنید.

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