Doc Client vs. Server توضیح می دهد که چگونه اشیاء ارجاع شده در اسکریپت شما می توانند سمت کلاینت یا سمت سرور باشند. اسکریپت کامل نه تنها شامل اشیایی است که میخواهید استفاده کنید، بلکه مجموعهای از دستورالعملها را نیز شامل میشود که به Earth Engine میگوید با آنها چه کار کند. این سند توضیح میدهد که چگونه این دستورالعملها برای پردازش به Google ارسال میشوند و چگونه نتایج برای نمایش به مشتری ارسال میشوند.
هنگامی که یک اسکریپت را در Earth Engine می نویسید (یا جاوا اسکریپت یا پایتون)، آن کد مستقیماً روی سرورهای Earth Engine در Google اجرا نمی شود. در عوض، کتابخانه مشتری اسکریپت را در مجموعه ای از اشیاء JSON رمزگذاری می کند، اشیاء را به Google ارسال می کند و منتظر پاسخ می ماند. هر شی نشان دهنده مجموعه ای از عملیات مورد نیاز برای به دست آوردن یک خروجی خاص است، برای مثال یک تصویر برای نمایش در مشتری. کد زیر را در نظر بگیرید:
ویرایشگر کد (جاوا اسکریپت)
var image = ee.Image('CGIAR/SRTM90_V4'); var operation = image.add(10); print(operation.toString()); print(operation);
import ee import geemap.core as geemap
کولب (پایتون)
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()
در ویرایشگر کد جاوا اسکریپت یک تابع ویژه سمت کلاینت است که فراخوانی getInfo()
ناهمزمان را میپیچد. برای پایتون ما آن را مستقیماً صدا می زنیم.
نمونه دیگری از درخواست چیزی، نمایش آن در کد ویرایشگر یا عنصر نقشه geemap است. هنگامی که این درخواست به Google ارسال می شود، فقط کاشی های لازم برای نمایش نتیجه در ویرایشگر کد یا عنصر نقشه geemap برگردانده می شوند. به طور خاص، موقعیت نقشه و سطح زوم تعیین می کند که کدام داده ها پردازش شده و به تصاویر قابل نمایش روی نقشه تبدیل می شوند. اگر حرکت یا زوم میکنید، توجه داشته باشید که سایر کاشیها با تنبلی محاسبه میشوند. این سیستم بر اساس تقاضا امکان موازی سازی و پردازش کارآمد را فراهم می کند، اما همچنین به این معنی است که تصویر نمایش داده شده بر روی نقشه از ورودی های مختلف بسته به سطح بزرگنمایی و محل محدوده نقشه تولید می شود. درباره نحوه تعیین ورودیهای یک محاسبات از درخواست در Scale doc بیشتر بیاموزید.