অনুমান

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

পাইথন সেটআপ

পাইথন এপিআই এবং ইন্টারেক্টিভ ডেভেলপমেন্টের জন্য geemap ব্যবহার সম্পর্কে তথ্যের জন্য পাইথন এনভায়রনমেন্ট পৃষ্ঠাটি দেখুন।

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

এই কোড নমুনার ক্রিয়াকলাপের ক্রম চিত্র ১-এ চিত্রিত করা হয়েছে। মনে রাখবেন যে ইনপুটের প্রক্ষেপণ আউটপুট দ্বারা নির্ধারিত হয়, বিশেষ করে কোড এডিটরে মানচিত্র প্রদর্শনের মানচিত্র মার্চেটর প্রক্ষেপণ দ্বারা। এই প্রক্ষেপণটি ক্রিয়াকলাপের ক্রম অনুসারে প্রচারিত হয় যাতে মানচিত্রের জুম স্তর দ্বারা নির্ধারিত স্কেলে মানচিত্র মার্চেটরে ইনপুটগুলি অনুরোধ করা হয়।

অভিক্ষেপ
চিত্র ১. কোড এডিটর ম্যাপে একটি MODIS চিত্রের প্রদর্শনের সাথে সম্পর্কিত ক্রিয়াকলাপের ফ্লো চার্ট। প্রতিটি ক্রিয়াকলাপের প্রক্ষেপণ (ফ্লো চার্টের বাম দিকে) আউটপুট থেকে নির্ধারিত হয়। বাঁকা রেখাগুলি পুনঃপ্রক্ষেপণে তথ্যের প্রবাহ নির্দেশ করে: বিশেষ করে, আউটপুট প্রক্ষেপণ এবং স্কেল।

আর্থ ইঞ্জিনে, প্রক্ষেপণগুলি একটি স্থানাঙ্ক রেফারেন্স সিস্টেম (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());

পাইথন সেটআপ

পাইথন এপিআই এবং ইন্টারেক্টিভ ডেভেলপমেন্টের জন্য geemap ব্যবহার সম্পর্কে তথ্যের জন্য পাইথন এনভায়রনমেন্ট পৃষ্ঠাটি দেখুন।

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())

মনে রাখবেন যে projection() দ্বারা ফেরত আসা ee.ProjectionnominalScale() কল করে, আপনি ছবির নেটিভ রেজোলিউশন নির্ধারণ করতে পারেন। নেটিভ রেজোলিউশন হল ইমেজ পিরামিডের সর্বনিম্ন স্তরের মিটারে নমিনাল পিক্সেল স্কেল। যেহেতু একটি ছবির প্রতিটি ব্যান্ডের একটি ভিন্ন স্কেল এবং/অথবা প্রক্ষেপণ থাকতে পারে, যদি আপনি এমন একটি ছবিতে 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());

পাইথন সেটআপ

পাইথন এপিআই এবং ইন্টারেক্টিভ ডেভেলপমেন্টের জন্য geemap ব্যবহার সম্পর্কে তথ্যের জন্য পাইথন এনভায়রনমেন্ট পৃষ্ঠাটি দেখুন।

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())

যদি আপনি এই ধরণের একটি ছবি গণনায় ব্যবহার করার চেষ্টা করেন, তাহলে আপনি একটি ত্রুটি দেখতে পাবেন যেমন:

সাধারণত, ১-ডিগ্রি স্কেলে একত্রিতকরণ কাঙ্ক্ষিত বা উদ্দেশ্যপ্রণোদিত নয়, তাই আর্থ ইঞ্জিন আউটপুটের জন্য একটি সম্পূর্ণ স্পেসিফিকেশন প্রদানের জন্য এই বন্ধুত্বপূর্ণ অনুস্মারকটি দেয়।

ব্যবহারকারীরা প্রায়শই এই আচরণটিকে বিভ্রান্তিকর বলে মনে করেন এবং "হারিয়ে যাওয়া" প্রক্ষেপণ তথ্য নিয়ে উদ্বিগ্ন হন, কিন্তু পিক্সেলগুলি আসলে প্রয়োজন না হওয়া পর্যন্ত গণনা করা হয় না ( আরও জানুন ), এবং সেই সময়ে, সর্বদা একটি আউটপুট প্রক্ষেপণ থাকে যা অনুরোধের সাথে থাকে যা কম্পোজিট কীভাবে গণনা করতে হবে তা নির্দিষ্ট করে।

বেশিরভাগ ব্যবহারের ক্ষেত্রে, কোনও প্রক্ষেপণ না থাকা কোনও সমস্যা নয় এবং এটি আসলে একটি মূল্যবান অপ্টিমাইজেশন, কারণ এটি সম্পূর্ণ রেজোলিউশন গণনা সম্পূর্ণ হওয়ার জন্য অপেক্ষা না করেই যেকোনো জুম স্তরে ফলাফলের পূর্বরূপ দেখার সুযোগ দেয়। তবে এর অর্থ হল বিভিন্ন জুম স্তরে আউটপুট ভিন্ন হতে পারে।

যদি অপ্টিমাইজ করা ডিসপ্লে ইমেজটি কোনওভাবে পর্যাপ্ত না হয়, তাহলে নিম্নলিখিত বিভাগে বর্ণিত আউটপুটটিকে পুনরায় প্রজেক্ট করে একটি নির্দিষ্ট প্রক্ষেপণে গণনা জোর করে করা যেতে পারে।

পুনঃপ্রক্ষেপণ

আপনি reproject() পদ্ধতি ব্যবহার করে একটি নির্দিষ্ট প্রক্ষেপণে জোরপূর্বক অপারেশন সম্পাদন করতে পারেন। reproject() ব্যবহার করলে reproject() কলে নির্দিষ্ট প্রক্ষেপণে ইনপুটগুলি অনুরোধ করা হবে। reproject() কলের আগে আপনার কোডের গণনা নির্দিষ্ট প্রক্ষেপণে করা হবে। উদাহরণস্বরূপ, একটি নির্দিষ্ট প্রক্ষেপণে একটি কম্পোজিট তৈরি করতে বাধ্য করা:

কোড এডিটর (জাভাস্ক্রিপ্ট)

// Some projection that is suitable for your area of interest.
var proj = ee.Projection(...);
var output = collection.reduce(...).reproject(proj);

পাইথন সেটআপ

পাইথন এপিআই এবং ইন্টারেক্টিভ ডেভেলপমেন্টের জন্য geemap ব্যবহার সম্পর্কে তথ্যের জন্য পাইথন এনভায়রনমেন্ট পৃষ্ঠাটি দেখুন।

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)

কিছু ক্ষেত্রে যেখানে একটি নির্দিষ্ট প্রক্ষেপণ প্রয়োজন হয়:

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');

পাইথন সেটআপ

পাইথন এপিআই এবং ইন্টারেক্টিভ ডেভেলপমেন্টের জন্য geemap ব্যবহার সম্পর্কে তথ্যের জন্য পাইথন এনভায়রনমেন্ট পৃষ্ঠাটি দেখুন।

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

পুনঃপ্রক্ষেপণ
চিত্র ২. কোড এডিটর ম্যাপে একটি MODIS চিত্রের পুনঃপ্রক্ষেপণের সাথে সম্পর্কিত ক্রিয়াকলাপের ফ্লো চার্ট। বাঁকা রেখাগুলি পুনঃপ্রক্ষেপণের তথ্যের প্রবাহ নির্দেশ করে: বিশেষ করে, আউটপুট প্রক্ষেপণ এবং স্কেল।