موتور زمین به گونهای طراحی شده است که هنگام انجام محاسبات، به ندرت نگران تصویرسازی نقشه باشید. همانند مقیاس، تصویرسازی که محاسبات در آن انجام میشود، بر اساس "کشش" تعیین میشود. به طور خاص، ورودیها در تصویرسازی خروجی درخواست میشوند. خروجی ممکن است از یک پارامتر تابع (مثلاً crs )، ویرایشگر کد و اشیاء نقشه geemap (که دارای تصویرسازی maps mercator (EPSG:3857) هستند) یا با فراخوانی reproject() تعیین شود. هنگامی که تصاویر را در ویرایشگر کد یا geemap نمایش میدهید، ورودیها در maps mercator درخواست میشوند. عملیات زیر را روی یک تصویر MODIS که دارای تصویرسازی سینوسی است، در نظر بگیرید:
ویرایشگر کد (جاوااسکریپت)
// The input image has a SR-ORG:6974 (sinusoidal) projection. var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0); // Normalize the image and add it to the map. var rescaled = image.unitScale(-2000, 10000); var visParams = {min: 0.15, max: 0.7}; Map.addLayer(rescaled, visParams, 'Rescaled');
import ee import geemap.core as geemap
کولب (پایتون)
# The input image has a SR-ORG:6974 (sinusoidal) projection. image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0) # Normalize the image and add it to the map. rescaled = image.unitScale(-2000, 10000) vis_params = {'min': 0.15, 'max': 0.7} m = geemap.Map() m.add_layer(rescaled, vis_params, 'Rescaled') m
ترتیب عملیات برای این نمونه کد در شکل ۱ نشان داده شده است. توجه داشته باشید که تصویر ورودی توسط خروجی، به ویژه تصویر map mercator نمایش نقشه در ویرایشگر کد، تعیین میشود. این تصویر از طریق توالی عملیات به عقب پخش میشود به طوری که ورودیها در maps mercator، در مقیاسی که توسط سطح بزرگنمایی نقشه تعیین میشود، درخواست میشوند.

در موتور Earth، تصاویر توسط یک سیستم مرجع مختصات (CRS یا پارامتر crs بسیاری از متدها) مشخص میشوند. میتوانید تصویر یک تصویر را با فراخوانی projection() روی آن بررسی کنید:
ویرایشگر کد (جاوااسکریپت)
var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(0); print('Projection, crs, and crs_transform:', image.projection()); print('Scale in meters:', image.projection().nominalScale());
import ee import geemap.core as geemap
کولب (پایتون)
image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select(0) display('Projection, crs, and crs_transform:', image.projection()) display('Scale in meters:', image.projection().nominalScale())
توجه داشته باشید که با فراخوانی nominalScale() در ee.Projection که توسط projection() برگردانده میشود، میتوانید وضوح اصلی تصویر را تعیین کنید. وضوح اصلی، مقیاس اسمی پیکسلها بر حسب متر از پایینترین سطح هرم تصویر است. از آنجا که هر باند از یک تصویر میتواند مقیاس و/یا وضوح متفاوتی داشته باشد، اگر projection() روی تصویری با حداقل یک باند که وضوح یکسانی با بقیه ندارد، فراخوانی کنید، ممکن است خطایی مانند زیر مشاهده کنید:
طرح پیشفرض
مگر اینکه نیاز داشته باشید محاسبات شما در یک تصویر خاص انجام شود، معمولاً نیازی به مشخص کردن تصویر نیست. فقط برای خروجی مبهم، Earth Engine از شما میخواهد که یک تصویر و/یا مقیاس مشخص کنید. ابهام میتواند ناشی از کاهش یک ImageCollection حاوی تصاویر با تصاویر مختلف باشد (یعنی ایجاد یک تصویر ترکیبی ). تصویری که ترکیبی یا موزاییکی از تصاویر ورودی با تصاویر مختلف است، تصویر پیشفرض را خواهد داشت که WGS84 با مقیاس ۱ درجه است. به عنوان مثال:
ویرایشگر کد (جاوااسکریپت)
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA'); var mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic(); print(mosaic.projection());
import ee import geemap.core as geemap
کولب (پایتون)
collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA') mosaic = collection.filterDate('2018-01-01', '2019-01-01').mosaic() display(mosaic.projection())
اگر سعی کنید از تصویری مانند این در محاسبات استفاده کنید، ممکن است خطایی مانند زیر مشاهده کنید:
عموماً، تجمیع در مقیاس ۱ درجه مطلوب یا مورد نظر نیست، بنابراین Earth Engine این یادآوری دوستانه را ارائه میدهد تا مشخصات کاملی برای خروجی ارائه دهد.
کاربران اغلب این رفتار را گیجکننده میدانند و نگران اطلاعات «گمشده» تصویرسازی هستند، اما پیکسلها تا زمانی که مورد نیاز نباشند، محاسبه نمیشوند ( بیشتر بدانید )، و در آن مرحله، همیشه یک تصویرسازی خروجی وجود دارد که همراه با درخواستی است که نحوه محاسبه ترکیب را مشخص کرده است.
در اکثر موارد استفاده، نداشتن تصویر مشکلی ایجاد نمیکند و در واقع یک بهینهسازی ارزشمند است، زیرا امکان پیشنمایش نتایج را در هر سطح زوم بدون نیاز به انتظار برای تکمیل محاسبات با وضوح کامل فراهم میکند. اما این بدان معناست که خروجی میتواند در سطوح زوم مختلف متفاوت به نظر برسد.
اگر تصویر نمایشی بهینهشده به نحوی کافی نباشد، میتوان با بازنمایی خروجی، همانطور که در بخش بعدی توضیح داده شده است، محاسبات را در یک تصویر خاص اعمال کرد.
بازطراحی
شما میتوانید با استفاده از متد reproject() عملیات را مجبور کنید که در یک تصویر خاص اجرا شوند. استفاده از reproject() منجر به درخواست ورودیها در تصویر مشخص شده در فراخوانی reproject() میشود. محاسبات در کد شما قبل از فراخوانی reproject() در تصویر مشخص شده انجام خواهد شد. به عنوان مثال، برای مجبور کردن یک ترکیب به تولید در یک تصویر خاص:
ویرایشگر کد (جاوااسکریپت)
// Some projection that is suitable for your area of interest. var proj = ee.Projection(...); var output = collection.reduce(...).reproject(proj);
import ee import geemap.core as geemap
کولب (پایتون)
# Some projection that is suitable for your area of interest. proj = ee.Projection(...) output = collection.reduce(...).reproject(proj)
چند موردی که نیاز به یک تصویر ثابت دارند عبارتند از:
- محاسبه گرادیان (به عنوان مثال
ee.Terrain.gradientیاee.Terrain.slope). -
reduceResolution، برای زمانی که میخواهید پیکسلهای با وضوح بالاتر را در وضوح پایینتر تجمیع کنید. ( درباره کاهش وضوح بیشتر بدانید ).
دلایل مختلفی وجود دارد که باید از استفاده از reproject() خودداری کنید، مگر اینکه کاملاً به آن نیاز داشته باشید. برای مثال فرض کنید چیزی را reproject میکنید و آن را به نقشه اضافه میکنید. اگر مقیاسی که در فراخوانی reproject() مشخص کردهاید بسیار کوچکتر از سطح بزرگنمایی نقشه باشد، Earth Engine تمام ورودیها را در مقیاس بسیار کوچک و در یک محدوده مکانی بسیار وسیع درخواست میکند. این میتواند منجر به درخواست دادههای بسیار زیاد به طور همزمان و بروز خطا شود.
اگر خروجی نهایی در تصویری متفاوت از آنچه در فراخوانی reproject() مشخص شده است، باشد، منجر به یک تصویرسازی مجدد دیگر خواهد شد. این دلیل دیگری است که باید در مورد استفاده از reproject() در کد خود محتاط باشید. مثال زیر را در نظر بگیرید که تصویر MODIS را مجبور میکند ابتدا به WGS84 و سپس به maps mercator برای نمایش در نقشه ویرایشگر کد، تصویرسازی مجدد شود:
ویرایشگر کد (جاوااسکریپت)
// The input image has a SR-ORG:6974 (sinusoidal) projection. var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0); // Operations *before* the reproject call will be done in the projection // specified by reproject(). The output results in another reprojection. var reprojected = image .unitScale(-2000, 10000) .reproject('EPSG:4326', null, 500); Map.addLayer(reprojected, {min: 0.15, max: 0.7}, 'Reprojected');
import ee import geemap.core as geemap
کولب (پایتون)
# The input image has a SR-ORG:6974 (sinusoidal) projection. image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0) # Operations *before* the reproject call will be done in the projection # specified by reproject(). The output results in another reprojection. reprojected = image.unitScale(-2000, 10000).reproject('EPSG:4326', None, 500) m = geemap.Map() m.add_layer(reprojected, {'min': 0.15, 'max': 0.7}, 'Reprojected') m
شکل ۲ جریان عملیات مربوط به این مثال سادهی بازنمایی را نشان میدهد. توجه داشته باشید که اولین بازنمایی، همانطور که در فراخوانی reproject() مشخص شده است، صریح است. دومین بازنمایی ضمنی است که توسط Earth Engine به طور خودکار انجام میشود تا نتیجه را روی نقشه نمایش دهد. همچنین توجه داشته باشید که اطلاعات مربوط به اینکه از چه تصویری استفاده شود، از درخواست به ورودی منتقل میشود.
