বিবিধ বিষয়গত মানচিত্রের জন্য মাস্টার গ্রিড হিসাবে আমার স্পেশাল গ্রিড প্রয়োজন। আমি কীভাবে সমস্ত এনএ পিক্সেল ছাড়াই কোনও রাস্টার থেকে একটি স্পেশিয়াল গ্রিড তৈরি করব?
বিবিধ বিষয়গত মানচিত্রের জন্য মাস্টার গ্রিড হিসাবে আমার স্পেশাল গ্রিড প্রয়োজন। আমি কীভাবে সমস্ত এনএ পিক্সেল ছাড়াই কোনও রাস্টার থেকে একটি স্পেশিয়াল গ্রিড তৈরি করব?
উত্তর:
আপনি একটি রাস্টারটিতে কোষগুলির সমস্ত নন-এনএ স্থানাঙ্কগুলি পেতে পারেন:
r = raster(matrix(runif(20),5,4))
r[r>.5]=NA
coordinates(r)[!is.na(values(r)),]
x y
[1,] 0.375 0.7
[2,] 0.125 0.5
[3,] 0.375 0.5
[4,] 0.625 0.5
[5,] 0.875 0.5
[6,] 0.125 0.3
[7,] 0.375 0.3
[8,] 0.625 0.3
[9,] 0.375 0.1
[10,] 0.875 0.1
সেগুলি এনএ নয় এমন কোষ। এরপরে আপনি সম্ভবত এটিকে স্পেশালপিক্সেলগুলিতে খাওয়ান
SpatialPixels(SpatialPoints(coordinates(r)[!is.na(values(r)),]))
Object of class SpatialPixels
Grid topology:
cellcentre.offset cellsize cells.dim
x 0.125 0.25 4
y 0.100 0.20 4
SpatialPoints:
x y
[1,] 0.375 0.7
[2,] 0.125 0.5
[3,] 0.375 0.5
[4,] 0.625 0.5
[5,] 0.875 0.5
[6,] 0.125 0.3
[7,] 0.375 0.3
[8,] 0.625 0.3
[9,] 0.375 0.1
[10,] 0.875 0.1
Coordinate Reference System (CRS) arguments: NA
যদিও গ্রিডে ব্যক্তিগতভাবে কিছু ছিলাম আমি একজন রাস্টার হিসাবে রাখি।
আপনি SpatialGrid
যেটি চান তা এখনও নিশ্চিত নই - বস্তুগুলি সম্পূর্ণ আয়তক্ষেত্রাকার গ্রিডগুলি সংজ্ঞায়িত করা হয়, সুতরাং এনএ পিক্সেল ব্যতীত কোনও অর্থ হয় না।
একটি রাস্টারলিয়ারকে একটি স্থানিক * অবজেক্টে (গ্রিড বা পিক্সেল) রূপান্তর করতে আপনি জোর করে ফাংশনটি "হিসাবে" ব্যবহার করতে পারেন
library(raster)
r <- raster(matrix(runif(20),5,4))
r[r>.5] <- NA
g <- as(r, 'SpatialGridDataFrame')
p <- as(r, 'SpatialPixels')
plot(r)
points(p)
আপনার দুটি প্রয়োজনীয়তা বিভিন্ন জিনিস সম্পর্কে বলে মনে হচ্ছে:
1) কিছু ধরণের নির্ভরযোগ্য রাস্টার গ্রিড টেম্পলেট।
2) একটি বিচ্ছুরিত গ্রিড যা স্পষ্টভাবে নিখোঁজ কোষগুলি সঞ্চয় করে না।
এসপি :: গ্রিডটোপোলজি প্রথমটি সরবরাহ করে, এটি নীচের বাম কোষের স্থানাঙ্ক (সেলসেন্টার.অফসেট), সেল স্পেসিং (সেলসাইজ) এবং গ্রিডের মাত্রা (সেলস.ডিম) এর উপর ভিত্তি করে গ্রিডের কেবল বিবরণ দেয়।
স্প :: স্প্যাটিয়ালপিক্সেলস ডেটা ফ্রেম বর্গ আপনাকে স্পার্স গ্রিডগুলি সংরক্ষণ করতে দেয় তবে এটি নিজেরাই এটি "টেমপ্লেট" এর চেয়ে অনেক বেশি সঞ্চয় করে - এটি প্রতিটি সমন্বয়কেও স্পষ্টভাবে সঞ্চয় করে। এর কারণ এটি দুটি কাজ করে, একটি এটি আপনাকে গ্রিড থেকে আসা মূল স্থানাঙ্কগুলি সংরক্ষণ করার অনুমতি দেয় এবং সম্ভবত কিছুটা অনিয়মিত হয়, দুটি এটি আপনাকে কেবলমাত্র সেই ঘরগুলি সংরক্ষণ করতে দেয় যার বৈধ মান রয়েছে। (যুক্তিযুক্তভাবে এই দুটি লক্ষ্য পৃথক করা উচিত ছিল, তবে এটি অন্য গল্প)।
আমি মনে করি না যে রাস্টার প্যাকেজের গ্রিডটোপোলজির একটি সুস্পষ্ট এনালগ রয়েছে, তবে আপনি "নিজের নিজস্ব রোল" করতে উপাদানগুলি ধরে রাখতে পারেন:
library(raster)
r1 <- raster(nrows=108, ncols=21, xmn=0, xmx=10)
## "cellsize"
res(r1)
## [1] 0.4761905 1.6666667
## extreme cell corners (just a different convention to sp's cellcentre)
extent(r1)
class : Extent
xmin : 0
xmax : 10
ymin : -90
ymax : 90
## we can also use bbox to get the same thing
bbox(r1)
min max
s1 0 10
s2 -90 90
## grid dimensions (including number of attributes/layers as 3rd "dim")
dim(r1)
## [1] 108 21 1
এই সমস্তগুলিকে একত্রে সংযুক্ত করে আমরা রাস্টার থেকে এসপি যেতে পারি:
GridTopology(bbox(r1)[,1] + res(r1)/2, res(r1), dim(r1)[2:1])
(কীভাবে মাত্রাগুলি বিপরীত করতে হবে তা দ্রষ্টব্য)। আর একটি সহজ উপায় স্পটালগ্রিডে জোর করে এবং এসপির গিগগ্রিডটপোলজি ব্যবহার করা, যদিও এটি স্থায়ীভাবে পথে তৈরি হওয়ার পরে এটি ব্যয়বহুল:
getGridTopology(as(r1, "SpatialGrid"))
রাস্টার "টপোলজি" এর এই তিনটি অংশই সমস্ত প্রয়োজনীয় নয়, কারণ কিছু অপ্রয়োজনীয় তবে এগুলি সমস্তকে একটি অবজেক্ট হিসাবে ক্যাপচার করার উপায় নেই - কেবলমাত্র উপরের যে রাস্টারটি তৈরি হয়েছে তা "খালি" এবং তাই এটি করতে পারে গ্রিডটোপোলজি এসপি জন্য কাজ করে। এটি "খালি" কীভাবে হবে তার বিশদ সম্পর্কে আমি নিশ্চিত নই, তবে এটি অবশ্যই "ডেটা" স্লটটি স্পষ্টভাবে সংরক্ষণ করে না এবং এতে মানগুলির তুলনায় এটি আরও ছোট। রাস্টার প্যাকেজটি সাধারণভাবে মেমরির ব্যবহারকে সর্বনিম্ন রাখার জন্য যথাসাধ্য চেষ্টা করে এবং তাই এর সাথে আপনাকে সত্যই "বিরল" হওয়ার বিষয়ে চিন্তা করতে হবে না।
এটি আরও কিছুটা ব্যাখ্যা করতে সহায়তা করতে পারে, আমি জানি আমি স্পেসডম্যানের উত্তরটি ওভারল্যাপ করছি তবে এখনও প্রশ্নটিতে আপনি কী বোঝাতে চেয়েছেন তা এখনও পরিষ্কার নয়।