محاسبات تصویر با Earth Engine REST API

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

راه‌اندازی سریع Earth Engine REST API نحوه دسترسی به بلوک‌های پیکسل از دارایی Earth Engine را نشان می‌دهد. فرض کنید می خواهید قبل از به دست آوردن نتیجه، یک محاسبات روی پیکسل ها اعمال کنید. این راهنما نشان می دهد که چگونه می توان یک محاسبات را با یکی از کتابخانه های مشتری نمونه سازی کرد، نمودار محاسباتی را سریالی کرد و از REST API برای به دست آوردن نتیجه محاسبه شده استفاده کرد. ایجاد درخواست‌های محاسباتی از طریق REST API با درخواست POST به یکی از نقاط پایانی محاسباتی مطابقت دارد، برای مثال computePixels ، computeFeatures یا value.compute عمومی.compute. به طور خاص، این مثال دریافت یک ترکیب متوسط از تصاویر Sentinel-2 را در یک منطقه کوچک نشان می دهد.

قبل از شروع

این دستورالعمل ها را دنبال کنید تا:

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

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