কীভাবে ইন্টারপোলেশন ছাড়াই অনিয়মিত বিন্দু ডেটা থেকে রাস্টার তৈরি করবেন


13

আমি একটি অনিয়মিত ব্যবধানে পয়েন্ট ডেটাবেস থেকে রাস্টার ইমেজ তৈরি করার চেষ্টা করছিলাম। ডেটা দেখে মনে হচ্ছে-

> head(s100_ras)
         x       y         z
1 267573.9 2633781 213.29545
2 262224.4 2633781  69.78261
3 263742.7 2633781  51.21951
4 259328.4 2633781 301.98413
5 264109.8 2633781 141.72414
6 255094.8 2633781  88.90244

আমি জাজের মধ্যে এই 'জেড' মানগুলি তৈরি করতে চাই যা আমি তৈরি করেছি

# Create a fine mesh grid
my_mesh=expand.grid(seq(min(s100_ras$Y),max(s100_ras$Y),l=100),
                    seq(min(s100_ras$X),max(s100_ras$X),l=100))

আমি আরও চাই যে জেড-মানগুলি সেই জাতীয় জাল পয়েন্টগুলির জন্য 'এনএ' হিসাবে অর্পণ করা হোক যা ডেটা পয়েন্টের বাইরে থাকে। জাল উপরের পয়েন্টগুলি এর মতো দেখাচ্ছে: https://drive.google.com/file/d/0B6GUNg-8d30vYzlwTkhvaHBFTnc/edit?usp=sarsing যখন আমি প্লট করি

plot(my_mesh)
points(s100_ras$Y, s100_ras$X, pch="*", col='blue')

সমস্যাটি হ'ল আমি নিশ্চিত যে এটি কীভাবে তৈরি করবেন, নিম্নলিখিত পদক্ষেপগুলি কার্যকর হয় না কারণ আমার জাল গ্রিড এবং ডেটা পয়েন্ট একই স্কেলের নয় !!

library(rgdal)
library(raster)
xyz<-cbind(my_mesh, s100_ras)
r <- rasterFromXYZ(xyz)
image(r)

আমি যদি ডেটা পয়েন্টগুলি (কোনও জাল ছাড়াই) ব্যবহার করে কোনও রাস্টার তৈরি করার চেষ্টা করি, তবে আমার ডেটা অনিয়মিতভাবে ব্যবধানযুক্ত হওয়ায় আর একটি ত্রুটি ছুঁড়েছে!

library(sp)
s100_ras <- data.frame(expand.grid(x = s100_ras$Y, y = s100_ras$X), 
                       z = as.vector(s100_ras$mean))
coordinates(s100_ras) <- ~x+y
proj4string(s100_ras) <- CRS("+proj=utm +zone=46 +datum=WGS84")
gridded(s100_ras) = TRUE

suggested tolerance minimum: 0.916421 
Error in points2grid(points, tolerance, round) : 
  dimension 1 : coordinate intervals are not constant

তদুপরি, আমি 'রাস্টার প্যাকেজ' এর 'রাস্টারাইজ' ফাংশন (অনিয়মিত গ্রিডগুলির জন্য) দিয়ে খেলার চেষ্টা করছিলাম, তবে এটির সাথে কোনও উপায় পেলাম না :( আমি কীভাবে ফাঁকে ফাঁকে ফাঁকে ফাঁকে নিয়মিত গ্রিড বানাতে পারি তা জানার জন্য, তবে প্রয়োজনে মৌলিকত্বের, আমি ইন্টারপোলেশনটি এড়াতে চাই id আইডিডাব্লু বা ক্রিগিং পদ্ধতি ছাড়াই অনিয়মিতভাবে ব্যবধানযুক্ত ডেটা পয়েন্টগুলির একটি রাস্টার তৈরি করা সম্ভব?


অনিয়মিত ব্যবধানযুক্ত গ্রিডগুলির সমস্যা হ'ল পয়েন্টগুলি খুব কাছাকাছি / একসাথে থাকা অবস্থায় অ্যালগরিদম ব্যর্থ হয়। এ (অনুকূল নয়) কার্যকার্য: কেন কোষগুলির মধ্যে ন্যূনতম দূরত্ব নেবেন না এবং একটি আয়তক্ষেত্রাকার ভেক্টর গ্রিড তৈরি করবেন না। তারপরে সেই গ্রিডে পয়েন্টগুলির গড় মানগুলিতে যোগদান করুন এবং এটি রাস্টারাইজ করুন।
কার্লিউ

আমার একই সমস্যা ছিল - সমাধানটি ছিল SpatialPixelsDataFrameপ্রস্তাবিত toleranceযুক্তি (আপনার ক্ষেত্রে 0.916421) দিয়ে ব্যবহার করা।
টমাস

উত্তর:


18

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

s100 <- matrix(c(267573.9, 2633781, 213.29545, 262224.4, 2633781, 69.78261, 263742.7, 2633781, 51.21951, 259328.4, 2633781, 301.98413, 264109.8, 2633781, 141.72414, 255094.8, 2633781, 88.90244),  ncol=3,  byrow=TRUE)
colnames(s100) <- c('X', 'Y', 'Z')

library(raster)
# set up an 'empty' raster, here via an extent object derived from your data
e <- extent(s100[,1:2])
e <- e + 1000 # add this as all y's are the same

r <- raster(e, ncol=10, nrow=2)
# or r <- raster(xmn=, xmx=,  ...

# you need to provide a function 'fun' for when there are multiple points per cell
x <- rasterize(s100[, 1:2], r, s100[,3], fun=mean)
plot(x)

সমস্যার সমাধান রবার্ট @ রবার্ট
ToNoY

দুঃখিত আপনি কেন ই <- ই + 1000 যুক্ত করবেন তা পরিষ্কার করতে পারেন?
mmann1123

@ mman1123 এটি কেবলমাত্র এই বিজোড় উদাহরণস্বরূপ ডেটা দিয়ে জিনিসগুলিকে কাজ করে তোলে। সমস্ত y স্থানাঙ্ক একই এবং তাই y এর দিকের পরিমাণটি শূন্য, সুতরাং আমি 1000 যুক্ত করে --- সম্পূর্ণ স্বেচ্ছাচারী --- সীমা থেকে রাস্টার তৈরি করতে সক্ষম হতে।
রবার্ট হিজম্যানস

এর জন্য কি পাইথোনিক সমাধান রয়েছে?
রাজ

5

এটি আমার পক্ষে কাজ করেছিল - প্রস্তাবিত সহনশীলতার যুক্তি (আপনার ক্ষেত্রে 0.916421) সহ স্পটিয়ালপিক্সেলস ডেটা ফ্রেম ব্যবহার করা সমাধান ছিল:

points <- SpatialPoints(s100_ras[,c('x','y')], s100_ras[,c('z')])
pixels <- SpatialPixelsDataFrame(points, tolerance = 0.916421, points@data)
raster <- raster(pixels[,'z'])

যদিও উচ্চ সহনশীলতার মানের কারণে, রাস্টার মূল পয়েন্টগুলির সাথে খুব ভাল ফিট করে না। আরও ভাল ফিট হতে পারে।


1
কোডের প্রথম লাইনে একটি বন্ধনী বন্ধনী নেই?
অ্যান্টি

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