عمليات حسابية على الجداول باستخدام Earth Engine REST API

ملاحظة: تحتوي واجهة REST API على ميزات جديدة ومتقدّمة قد لا تكون مناسبة لجميع المستخدمين. إذا كنت تستخدم Earth Engine للمرة الأولى، يُرجى البدء بقراءة دليل JavaScript.

يوضّح دليل البدء السريع لواجهة برمجة تطبيقات REST في Earth Engine كيفية الوصول إلى مجموعات من وحدات البكسل من مواد عرض 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 لإنشاء ملف مفتاح لحساب الخدمة. سيتم إنشاء ملف المفتاح على الجهاز الظاهري لدفتر الملاحظات.

# 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/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). وبشكل عام، يجب إنشاء هذه العناصر باستخدام إحدى واجهات برمجة التطبيقات الخاصة بالعملاء.

# 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، ويمكن أن تستخدمه تطبيقات أو عمليات أخرى.