การคำนวณรูปภาพด้วย REST API ของ Earth Engine

หมายเหตุ: REST API มีฟีเจอร์ใหม่และขั้นสูงที่อาจไม่เหมาะกับผู้ใช้บางราย หากคุณเพิ่งเริ่มใช้ Earth Engine โปรดเริ่มต้นด้วยคู่มือ JavaScript

การเริ่มต้นใช้งาน REST API ของ Earth Engine อย่างรวดเร็วแสดงวิธีเข้าถึงบล็อกของพิกเซลจากชิ้นงาน Earth Engine สมมติว่าคุณต้องการใช้การคำนวณกับพิกเซลก่อนที่จะได้รับผลลัพธ์ คู่มือนี้แสดงวิธีสร้างต้นแบบการคำนวณด้วยไลบรารีของไคลเอ็นต์รายการใดรายการหนึ่ง, จัดรูปแบบกราฟการคำนวณ และใช้ REST API เพื่อรับผลลัพธ์ที่คำนวณแล้ว การส่งคำขอการคำนวณผ่าน REST API จะสอดคล้องกับPOSTคำขอไปยังปลายทางการคำนวณรายการใดรายการหนึ่ง เช่น computePixels, computeFeatures หรือ value.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 ของ Notebook

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

กำหนดการคำนวณ

สร้างต้นแบบการคำนวณอย่างง่ายด้วย Client 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

หากเรียกใช้ใน Notebook คุณจะแสดงผลลัพธ์ได้โดยใช้IPythonวิดเจ็ตแสดงรูปภาพ

# Import the Image function from the IPython.display module.
from IPython.display import Image
Image(image_content)