इंटरपोल के बिना अनियमित बिंदु डेटा से रिस्टर कैसे बनाया जाए


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

मैं एक जाल के भीतर ये 'z' मान चाहता हूं, जो मैंने बनाया है

# 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=sharing जब मैं साजिश करता हूं

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

इसके अलावा, मैं 'रैस्टर पैकेज' के 'rasterize' फंक्शन (अनियमित ग्रिड के लिए) के साथ खेलने की कोशिश कर रहा था, लेकिन इसके साथ कोई रास्ता नहीं निकाल सका :( मुझे पता है कि एक नियमित ग्रिड कैसे बनाना और बनाना है, लेकिन इसके लिए मैं जानता हूं। मौलिकता के साथ, मैं AVOID प्रक्षेप करना चाहता हूं। क्या बिना idw या kriging विधियों के अनियमित रूप से अंतरित डेटा बिंदुओं का रेखापुंज बनाना संभव है?


अनियमित स्थानिक ग्रिड के साथ समस्या यह है कि यदि अंक बहुत पास / दूर एक साथ स्थित हों तो एल्गोरिथ्म विफल हो जाता है। ए (गैर-इष्टतम) वर्कअराउंड: क्यों नहीं कोशिकाओं के बीच न्यूनतम दूरी लें और एक आयताकार वेक्टर ग्रिड बनाएं। फिर उस ग्रिड के बिंदुओं के औसत मूल्यों से जुड़ें और इसे व्यवस्थित करें।
Curlew

मेरे पास एक ही समस्या थी - समाधान 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)

समस्या का उत्कृष्ट समाधान @ रॉबर्ट
टोनी

क्षमा करें क्या आप स्पष्ट कर सकते हैं कि आपने ई <- ई + 1000 क्यों जोड़ा?
mmann1123 3

@ mman1123 इन विषम उदाहरण डेटा के साथ काम करने के लिए है। सभी y निर्देशांक समान हैं और इसलिए y दिशा में सीमा शून्य है, इसलिए मैं 1000 --- पूरी तरह से मनमाना --- को सीमा से रेखापुंज करने में सक्षम होने के लिए जोड़ता हूं।
रॉबर्ट हिजमैन

क्या इसके लिए एक पायथोनिक समाधान है?
राज

5

यह मेरे लिए काम करता है - समाधान का सुझाव दिया सहिष्णुता तर्क के साथ SpatialPixelsDataFrame का उपयोग करना था (आपके मामले में 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
कोड की पहली पंक्ति में एक समापन ब्रैकेट गायब है?
अंटी

@ धन्यवाद धन्यवाद, सही किया!
टॉमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.