রাস্টার থেকে স্থানিক গ্রিড উত্পাদন কিভাবে?


9

বিবিধ বিষয়গত মানচিত্রের জন্য মাস্টার গ্রিড হিসাবে আমার স্পেশাল গ্রিড প্রয়োজন। আমি কীভাবে সমস্ত এনএ পিক্সেল ছাড়াই কোনও রাস্টার থেকে একটি স্পেশিয়াল গ্রিড তৈরি করব?


6
আমাদের এখানে কিছু স্ক্র্যাপ নিক্ষেপ করুন। একটি রাস্টার তৈরি করার জন্য একটি ছোট কোড এবং আপনি এটি কী আশা করছেন?
স্পেসডম্যান

উত্তর:


14

আপনি একটি রাস্টারটিতে কোষগুলির সমস্ত নন-এনএ স্থানাঙ্কগুলি পেতে পারেন:

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


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

আপনি সম্ভবত একটি মাস্টার রাস্টার (হ্যাক!) চাইবেন এবং তারপরে এটির সাথে সাথে পরবর্তী সমস্ত গ্রিড তৈরি করতে পারেন।
রাডার

2
একমত। যদি জিনিসগুলি গ্রিড করা হয় তবে রাস্টার প্রায় উত্তরই থাকে। হয় তা হয়, বা স্পেশিয়ালপিক্সেলগুলি কীভাবে করবেন তা নির্ধারণের জন্য আর এর প্রয়োগকৃত স্থানিক ডেটা বিশ্লেষণের প্রায় 20 পৃষ্ঠাগুলির মধ্য দিয়ে লোড করা। আমি আজ সেই পিএইচডি ছাত্রকে সেই পছন্দটি দিয়েছিলাম। সে বেছে নিয়েছে ... বুদ্ধিমানের!
স্পেসডম্যান

20

একটি রাস্টারলিয়ারকে একটি স্থানিক * অবজেক্টে (গ্রিড বা পিক্সেল) রূপান্তর করতে আপনি জোর করে ফাংশনটি "হিসাবে" ব্যবহার করতে পারেন

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)

7

আপনার দুটি প্রয়োজনীয়তা বিভিন্ন জিনিস সম্পর্কে বলে মনে হচ্ছে:

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

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

এটি আরও কিছুটা ব্যাখ্যা করতে সহায়তা করতে পারে, আমি জানি আমি স্পেসডম্যানের উত্তরটি ওভারল্যাপ করছি তবে এখনও প্রশ্নটিতে আপনি কী বোঝাতে চেয়েছেন তা এখনও পরিষ্কার নয়।

  • (যুক্তিযুক্তভাবে, যেহেতু আপনি স্পষ্টত স্থানাঙ্কের চেয়ে কেবলমাত্র তাদের সূচকগুলি সংরক্ষণ করে স্পারস কোষগুলি সঞ্চয় করতে পারেন এবং মূলত "সামান্য অনিয়মিত" সেল স্থানাঙ্কগুলি কেবলমাত্র যদি আপনি চান তবে এটি বৈশিষ্ট্য হিসাবে সংরক্ষণ করা যেতে পারে sp স্প বা রাস্টার উভয়ই অনিয়মিত রাস্টারদের সাথে ডিল করেনি, এমনকি সরল রেকটিলাইনারের ক্ষেত্রেও নয় - এটি বেশিরভাগ জিআইএস সরঞ্জামগুলির সাথে সঙ্গতিপূর্ণ, তবে এটি দুর্ভাগ্যজনক যেহেতু এটি নেটসিডিএফ এর মতো ফর্ম্যাটগুলিতে বেশ সাধারণ এবং এটি আর এর ভাল পুরানো গ্রাফিক্স :: চিত্র ফাংশন দ্বারা পরিচালিত হয়েছে (যদিও সাম্প্রতিক রাস্টারআইমেজ বিকল্পটি ব্যবহৃত হয় না তবে) ।)

আমি হজম করা প্রয়োজন যে খুব শিক্ষামূলক বক্তব্য জন্য ধন্যবাদ। আশা করি আমার সমস্যা সমাধান করতে সক্ষম হবেন বা একটি প্রশ্ন পোস্ট করুন যা আরও সুস্পষ্ট!
জানবব স্কোয়ারব্রাইনগুলি

এছাড়াও @ স্পিডম্যান: আমি ফোরামটিতে আমার প্রশ্নের পটভূমিটি আরও সুনির্দিষ্টভাবে সংজ্ঞায়িত করেছি
জানবব স্কোয়ারব্রাইনগুলি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.