আর্থ ইঞ্জিনটি এমনভাবে ডিজাইন করা হয়েছে যাতে গণনা করার সময় আপনাকে খুব কমই মানচিত্রের অনুমান সম্পর্কে চিন্তা করতে হয়। স্কেলের মতো, যে অভিক্ষেপে গণনা হয় তা "টান" ভিত্তিতে নির্ধারিত হয়। বিশেষত, আউটপুট অভিক্ষেপে ইনপুট অনুরোধ করা হয়। আউটপুট একটি ফাংশন প্যারামিটার (যেমন crs
), কোড এডিটর এবং geemap ম্যাপ অবজেক্ট (যার একটি ম্যাপ মার্কেটর (EPSG:3857) প্রজেকশন আছে), অথবা একটি reproject()
কলের মাধ্যমে নির্ধারিত হতে পারে। আপনি যখন কোড এডিটর বা জিম্যাপে ছবি প্রদর্শন করেন, তখন ম্যাপ মার্কেটরে ইনপুট অনুরোধ করা হয়। একটি 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
এই কোড নমুনার অপারেশনের ক্রম চিত্র 1-এ চিত্রিত করা হয়েছে। উল্লেখ্য যে ইনপুটের অভিক্ষেপ আউটপুট দ্বারা নির্ধারিত হয়, বিশেষ করে কোড এডিটরে ম্যাপ প্রদর্শনের ম্যাপ মার্কেটর প্রজেকশন। এই প্রজেকশনটি ক্রিয়াকলাপের ক্রমানুসারে প্রসারিত হয় যাতে ইনপুটগুলি মানচিত্রের জুম স্তর দ্বারা নির্ধারিত স্কেলে ম্যাপ মার্কেটরে অনুরোধ করা হয়।

আর্থ ইঞ্জিনে, অনুমানগুলি একটি স্থানাঙ্ক রেফারেন্স সিস্টেম (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())
উল্লেখ্য যে ee-এ nominalScale()
কল করে ee.Projection
projection()
দ্বারা রিটার্ন করা হয়েছে, আপনি ছবির নেটিভ রেজোলিউশন নির্ধারণ করতে পারবেন। নেটিভ রেজোলিউশন হল ইমেজ পিরামিডের সর্বনিম্ন স্তরের মিটারে নামমাত্র পিক্সেল স্কেল। যেহেতু একটি চিত্রের প্রতিটি ব্যান্ডের একটি ভিন্ন স্কেল এবং/অথবা অভিক্ষেপ থাকতে পারে, আপনি যদি অন্তত একটি ব্যান্ড সহ একটি চিত্রকে projection()
কল করেন যার অন্যগুলির মতো একই অভিক্ষেপ নেই, আপনি একটি ত্রুটি দেখতে পাবেন:
ডিফল্ট অভিক্ষেপ
একটি নির্দিষ্ট অভিক্ষেপে ঘটতে আপনার গণনার প্রয়োজন না হলে, সাধারণত একটি অভিক্ষেপ নির্দিষ্ট করার প্রয়োজন নেই। শুধুমাত্র অস্পষ্ট আউটপুটের জন্য আর্থ ইঞ্জিনের জন্য আপনাকে একটি প্রজেকশন এবং/অথবা স্কেল নির্দিষ্ট করতে হবে। অস্পষ্টতা বিভিন্ন অনুমান সহ ইমেজ ধারণকারী একটি ImageCollection
হ্রাস করার ফলে হতে পারে (যেমন একটি যৌগিক তৈরি করা )। একটি চিত্র যা বিভিন্ন অনুমান সহ ইনপুট চিত্রগুলির একটি যৌগিক বা মোজাইক, তার ডিফল্ট অভিক্ষেপ থাকবে, যা 1-ডিগ্রি স্কেল সহ 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())
আপনি যদি একটি গণনার মতো একটি চিত্র ব্যবহার করার চেষ্টা করেন তবে আপনি একটি ত্রুটি দেখতে পাবেন:
সাধারণত, 1-ডিগ্রি স্কেলে একটি সমষ্টি পছন্দসই বা উদ্দেশ্য নয়, তাই আউটপুটের জন্য একটি সম্পূর্ণ স্পেসিফিকেশন প্রদান করার জন্য আর্থ ইঞ্জিন এই বন্ধুত্বপূর্ণ অনুস্মারক দেয়।
ব্যবহারকারীরা প্রায়শই এই আচরণটিকে বিভ্রান্তিকর বলে মনে করেন এবং "হারিয়ে যাওয়া" প্রজেকশন তথ্য নিয়ে উদ্বিগ্ন হন, কিন্তু পিক্সেলগুলি আসলে গণনা করা হয় না যতক্ষণ না তাদের প্রয়োজন হয় ( আরও জানুন ), এবং সেই সময়ে, সর্বদা একটি আউটপুট প্রজেকশন থাকে যা অনুরোধের সাথে থাকে যা সংমিশ্রণটি কীভাবে গণনা করতে হয় তা নির্দিষ্ট করে৷
বেশিরভাগ ব্যবহারের ক্ষেত্রে, কোনও প্রজেকশন না থাকা কোনও সমস্যা নয় এবং এটি আসলে একটি মূল্যবান অপ্টিমাইজেশান, কারণ এটি সম্পূর্ণ রেজোলিউশন গণনা সম্পূর্ণ হওয়ার জন্য অপেক্ষা না করে যে কোনও জুম স্তরে ফলাফলগুলির পূর্বরূপ দেখতে দেয়। কিন্তু এর মানে এই যে আউটপুট বিভিন্ন জুম স্তরে ভিন্ন হতে পারে।
যদি অপ্টিমাইজ করা ডিসপ্লে ইমেজ কোনোভাবে পর্যাপ্ত না হয়, তাহলে নিচের বিভাগে বর্ণিত আউটপুটটিকে পুনরায় প্রজেক্ট করে একটি নির্দিষ্ট প্রজেকশনে গণনা বাধ্য করা যেতে পারে।
রিপ্রজেক্ট করা হচ্ছে
আপনি 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()
কলে নির্দিষ্ট করা থেকে একটি ভিন্ন প্রজেকশনে থাকে, তাহলে এর ফলে আরেকটি রিপ্রজেকশন হবে। এটি আপনার কোডে reproject()
ব্যবহার করার বিষয়ে সতর্ক হওয়ার আরেকটি কারণ। নিম্নলিখিত উদাহরণটি বিবেচনা করুন, যা MODIS চিত্রটিকে প্রথমে WGS84 তে পুনঃপ্রকল্পিত করতে বাধ্য করে, তারপর কোড এডিটর মানচিত্রে প্রদর্শনের জন্য ম্যাপ মার্কেটারে পুনরায় প্রজেক্ট করা হয়:
// 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
চিত্র 2 এই সাধারণ পুনরুজ্জীবন উদাহরণের সাথে সম্পর্কিত ক্রিয়াকলাপের প্রবাহকে চিত্রিত করে। মনে রাখবেন যে প্রথম রিপ্রোজেকশনটি স্পষ্ট, যেমন reproject()
কলে উল্লেখ করা হয়েছে। দ্বিতীয় রিপ্রজেকশনটি অন্তর্নিহিত, যা আর্থ ইঞ্জিন দ্বারা স্বয়ংক্রিয়ভাবে সম্পাদিত হয় যাতে মানচিত্রে ফলাফল প্রদর্শন করা যায়। এছাড়াও লক্ষ্য করুন যে কোন প্রজেকশন ব্যবহার করতে হবে সেই তথ্য অনুরোধ থেকে ইনপুটে ফিরে আসে।
