التنفيذ المؤجَّل

يوضّح مستند الاختلاف بين العميل والخادم كيف يمكن أن تكون العناصر المُشار إليها في النص البرمجي من جهة العميل أو الخادم. لا يحتوي النص البرمجي الكامل على العناصر التي تريد استخدامها فقط، بل يحتوي أيضًا على مجموعة من التعليمات التي تُعلِم Earth Engine كيفية التعامل معها. يوضّح هذا المستند كيفية إرسال هذه التعليمات إلى Google لمعالجتها، وكيفية إعادة إرسال النتائج إلى العميل لعرضها.

عند كتابة نص برمجي في Earth Engine (سواءً كان JavaScript أو Python)، لا يتم تشغيل هذا الرمز البرمجي مباشرةً على خوادم Earth Engine في Google. بدلاً من ذلك، تُشفِّر مكتبة العميل النص البرمجي إلى مجموعة من عناصر JSON، وتُرسِل العناصر إلى Google وتنتظر الردّ. يمثّل كل عنصر مجموعة من العمليات المطلوبة للحصول على ناتج معيّن، مثل صورة لعرضها في العميل. راجِع الرمز البرمجي التالي:

محرِّر الرموز البرمجية (JavaScript)

var image = ee.Image('CGIAR/SRTM90_V4');
var operation = image.add(10);
print(operation.toString());
print(operation);

إعداد لغة Python

اطّلِع على صفحة بيئة Python للحصول على معلومات عن واجهة برمجة التطبيقات Python API واستخدام IDE geemap لتطوير التطبيقات التفاعلي.

import ee
import geemap.core as geemap

Colab (Python)

image = ee.Image('CGIAR/SRTM90_V4')
operation = image.add(10)
print(operation)
print(operation.getInfo())

سيؤدي بيان الطباعة الأول إلى عرض بنية JSON التي تستخدمها مكتبة العميل لوصف هذه الصورة للخادم في Google:

ee.Image({
  "type": "Invocation",
  "arguments": {
    "image1": {
      "type": "Invocation",
      "arguments": {
        "id": "CGIAR/SRTM90_V4"
      },
      "functionName": "Image.load"
    },
    "image2": {
      "type": "Invocation",
      "arguments": {
        "value": 10
      },
      "functionName": "Image.constant"
    }
  },
  "functionName": "Image.add"
})
    

سيُرسِل بيان الطباعة الثاني الطلب إلى Google ويعرض ردّ POST من خوادم Google. للاطّلاع على الاستجابة بتنسيق JSON بالكامل، انقر على رابط JSON على يسار وحدة التحكّم بجانب العنصر المطبوع:

{
  "type": "Image",
  "bands": [
    {
      "id": "elevation",
      "data_type": {
        "type": "PixelType",
        "precision": "int",
        "min": -32758,
        "max": 32777
      },
      "crs": "EPSG:4326",
      "crs_transform": [
        0.0008333333535119891,
        0,
        -180,
        0,
        -0.0008333333535119891,
        60
      ]
    }
  ]
}
    

لا يتم إرسال أي بيانات إلى Google لمعالجتها إلا بعد تلقّي طلب بذلك. في هذا المثال، يؤدي طباعة نتيجة طلب getInfo() على عنصر خادم إلى بدء طلب. ولا تتم أي معالجة على الخادم إلى أن يتم طلب هذه النتيجة صراحةً. يُرجى العِلم أنّ print() في "محرر رموز JavaScript" هي دالة خاصة من جهة العميل تُغلِّف طلب getInfo() غير متزامن. أمّا في Python، فندعوها مباشرةً.

مثال آخر على طلب شيء ما هو عرضه في "محرر الرموز" أو عنصر خريطة geemap. عند إرسال هذا الطلب إلى Google، لا يتم عرض سوى المربّعات اللازمة لعرض النتيجة في "محرر الرموز" أو عنصر خريطة geemap. على وجه التحديد، يحدّد موضع الخريطة ومستوى التكبير أو التصغير البيانات التي تتم معالجتها وتحويلها إلى صور يمكن عرضها على الخريطة. في حال تم التمرير أو التصغير/التكبير، يُرجى العِلم أنّه يتم احتساب المربّعات الأخرى بشكلٍ بطيء. يتيح هذا النظام عند الطلب إجراء العمليات بالتوازي وبكفاءة، ولكنه يعني أيضًا أنّ الصورة المعروضة على الخريطة يتم إنشاؤها من inputs مختلفة استنادًا إلى مستوى التكبير وموقع حدود الخريطة. اطّلِع على مزيد من المعلومات عن كيفية تحديد مدخلات العملية الحسابية من الطلب في مستند Scale.