রাস্টারলেয়ারের জন্য @ ডেটা @ মান স্লটে কেন কেবল যৌক্তিক (0) থাকে এবং প্রকৃত মানগুলি কেন হয় না?


12

কেন নীচে পৌঁছানোর চেষ্টা করছি, যখন আমি এনডিভিআইয়ের রাস্টারটিতে পড়ি, @ ডেটা @ মান স্লটে প্রকৃত মানগুলি ম্যানুয়ালি সেট না করা থাকে না। উদাহরণ স্বরূপ:

    NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
    NDVI@data@values
            ## returns: logical(0)

আমি একই পদ্ধতিতে লোড করেছি এমন অন্যান্য রেস্টারদের সাথে এটি ঘটেনি, তাই আমি বিভ্রান্ত। আমি আশা করি আমি আরও সুনির্দিষ্ট হতে পারতাম তবে এর আগে আলাদা কিছু করার কথা মনে নেই। এটি ব্যবহার করে ম্যানুয়ালি মানগুলি পাওয়া যথেষ্ট সহজ:

    NDVI1@data@values <- getValues(NDVI19east)

তবে প্রতিটি ফাইলের জন্য এটি করা এখনও বেদনা। সুতরাং, দ্বি-অংশ প্রশ্ন:

  1. কেন এটি প্রথম স্থানে ঘটল? আমি বুঝতে পেরেছি যে রাস্টার ফাইলটি কীভাবে সংরক্ষণ করা হচ্ছে (যেমন এটি স্মৃতিতে রয়েছে কিনা) এর সাথে আমাদের কিছু করতে পারে তবে আমি সত্যিই বুঝতে পারি না যে এটি কীভাবে ডেটা অ্যাক্সেসের জন্য আমার ব্যবহার করা উচিত পদ্ধতিগুলি পরিবর্তন করে ...

  2. রাস্টারলায়ার্স হিসাবে ফাইলগুলি পড়ার জন্য এবং এই ফাইলগুলির জন্য মানগুলি অ্যাক্সেস করার জন্য এই প্রক্রিয়াটি (সম্ভবত ল্যাপলির অনুরূপ কোনও পদ্ধতি ব্যবহার করে) স্বয়ংক্রিয় করার কোনও উপায় আছে কি? আমার বর্তমান প্রকল্পে NDVI, বৃষ্টিপাত এবং অন্যান্য পরিবেশগত ভেরিয়েবলগুলির জন্য একসাথে 6-10 টি ফাইল পড়ার সাথে জড়িত রয়েছে যাতে তাদের একত্রিত করা যায় এবং কিছু ওজনযুক্ত ওভারলেগুলি করা যায়। ডেটা আমদানি করার প্রক্রিয়াটি স্বয়ংক্রিয় করতে সহায়ক হবে।


6
আপনি অভ্যন্তরীণ কোড বিকাশ না করা অবধি @ ব্যবহার করবেন না - পঠিত সমস্ত (NDVI) ব্যবহার করুন। এটি মেমোরি-দক্ষতার কৌশল হিসাবে ঘটে, আপনি খুব বড় আকারের গ্রিডগুলি একটি প্রতিশ্রুতি হিসাবে খুলতে পারেন - রাস্টার যখন আপনার প্রকৃতপক্ষে সংখ্যার প্রয়োজন হয় তখন ডেটা (rgdal এর মাধ্যমে, এই ক্ষেত্রে GDAL এর মাধ্যমে) টেনে আনার প্রতিশ্রুতি দেয়। আপনার যদি প্রয়োজন হয় তবে স্ট্যান্ডেলোন আর অবজেক্টটি কোনও ফাইলের সাথে আবদ্ধ না হয়ে সংরক্ষণ করা উচিত সমস্তই এটি করার উপায়। দেখুন? রাস্টার "বেশিরভাগ ক্ষেত্রে। ... না (শুরুতে) (র‌্যাম)" তে কোনও সেল (পিক্সেল) মান ধারণ করে না "
mdsumner

2
logical(0)আসলে জন্য মান কোনো রাস্টার * একটি ফাইল থেকে নির্মিত বস্তু। যেভাবেই হোক, @ এমডিস্মনার বলেছেন যে এই মানগুলি সরাসরি পড়বেন না এবং অবশ্যই সেগুলি সেট করবেন না! (যদিও আপনার কোনও কিছুইNDVI1@data@values <- getValues(NDVI19east) প্রভাবিত করবে না , এই মানগুলি উপেক্ষা করা হবে)। এটি সম্ভবত আপনার স্ক্রিপ্টের আরও নিচে রয়েছে যেখানে আপনি কীভাবে এই বিষয়গুলি কার্যকরভাবে ব্যবহার করবেন তা বুঝতে পারেন না। আপনি getValues ​​ব্যবহার করতে পারেন, তবে এটি খুব কমই প্রয়োজনীয়। আপনি কী অর্জন করার চেষ্টা করছেন তার একটি সাধারণ, স্ব-অন্তর্ভুক্ত উদাহরণ সরবরাহ করুন।
রবার্ট হিজম্যানস

2
অনেক অনেক ধন্যবাদ। এমডসুমনার যেমনটি বলেছিলেন তেমনি রিডএল () এর সাথে আমার যা করা প্রয়োজন তা শেষ করেছিলাম, সুতরাং এর জন্য ধন্যবাদ - এটি ভাল পরামর্শ ছিল! আমি রাস্টার প্যাকেজটিতে সাম্প্রতিক নতুন ছিলাম তাই আমি সত্যিই সেই ফাংশন এবং বড় ফাইলগুলির আসল মানগুলিতে অ্যাক্সেসের জন্য এটি ব্যবহার করার প্রয়োজন সম্পর্কে অবগত ছিলাম না।
হেনরি হকিন্স ওয়েলস

উত্তর:


3

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

এখানে আপনি নাসা থেকে ওয়ার্ল্ড ওয়াইড জেপিজির এনভিডিআই ডাউনলোড করতে পারেন

চেষ্টা করার জন্য এখানে আপনার কাছে কোড এবং একটি রাস্টার ফাইল রয়েছে

প্রশ্নে প্রদর্শিত হিসাবে, রাস্টারকে রাষ্টারে () ফাংশন দিয়ে লোড করা প্রকৃত মানগুলিকে মেমরিতে লোড করে না।

এখানে চিত্র বর্ণনা লিখুন

আপনি দেখতে পাচ্ছেন, এনভিডিআই @ ডেটা @ মানগুলির কোনও মান নেই যখন প্লটটি সেই "হিডেন" মানগুলি দেখিয়ে রেন্ডার করা যায়। আপনি দেখতে পাচ্ছেন যে, আপনি যদি QGIS এ ফাইলটি লোড করেন তবে মানগুলি আসলে পড়ে।

এখানে চিত্র বর্ণনা লিখুন

সুতরাং, আপনাকে রাস্টার প্যাকেজ থেকে রিডএল () ফাংশনটি ব্যবহার করতে হবে (যেমন মন্তব্যগুলিতে এমডসমার বলেছেন)) কোডটি এখানে:

library(raster)

NDVI <- raster("./RenderData.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
str(NDVI)
plot(NDVI)

NDVI.all <- readAll(NDVI)
head(NDVI.all@data@values)

এই ফাংশনটি ব্যবহার করে আপনি এখন ফাইলের মধ্যে রাস্টার মানগুলিতে অ্যাক্সেস করতে পারবেন।

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.