यहाँ R में एक तरीका है:
एक परीक्षण रेखापुंज करें, 20x30 कोशिकाएं, 1 से 1 तक के सेल सेट करें, प्लॉट:
> require(raster)
> m = raster(nrow=20, ncol=30)
> m[] = as.numeric(runif(20*30)>.9)
> plot(m)
एक फ़ाइल में एक मौजूदा रेखापुंज के लिए, उदाहरण के लिए एक जियोटीफ़, आप बस कर सकते हैं:
> m = raster("mydata.tif")
अब 1 कोशिकाओं के xy निर्देशांक का एक मैट्रिक्स प्राप्त करें, उन बिंदुओं को प्लॉट करें, और हम देखते हैं कि हमारे पास सेल केंद्र हैं:
> ones = xyFromCell(m,1:prod(dim(m)))[getValues(m)==1,]
> head(ones)
x y
[1,] -42 85.5
[2,] 102 85.5
[3,] 162 85.5
[4,] 42 76.5
[5,] -54 67.5
[6,] 30 67.5
> points(ones[,1],ones[,2])
चरण 1. एक एकल कक्ष के आकार में 1000 (xo, yo) जोड़े उत्पन्न करें जो एक बॉक्स में 0 पर केंद्रित हैं। res
सेल का आकार पाने के लिए नोट का उपयोग करें :
> pts = data.frame(xo=runif(1000,-.5,.5)*res(m)[1], yo=runif(1000,-.5,.5)*res(m)[2])
चरण 2. उपरोक्त सभी बिंदुओं में से प्रत्येक से 1 कोशिकाओं की संख्या से 1000 मानों को बेतरतीब ढंग से नमूना करने के लिए कौन सा सेल काम कर रहा है:
> pts$cell = sample(nrow(ones), 1000, replace=TRUE)
अंत में ऑफ़सेट में सेल केंद्र को जोड़कर समन्वय की गणना करें। जाँच करने के लिए प्लॉट:
> pts$x = ones[pts$cell,1]+pts$xo
> pts$y = ones[pts$cell,2]+pts$yo
> plot(m)
> points(pts$x, pts$y)
यहाँ 10,000 अंक दिए गए हैं (1000 से ऊपर 1000 बदलें), के साथ प्लॉट किया गया pch="."
:
एक 200x300 रेखापुंज पर 10,000 अंकों के लिए बहुत अधिक तात्कालिक रूप से आधे अंक वाले। मुझे लगता है कि रेखापुंज में कितने लोगों के साथ समय में वृद्धि होगी।
एक आकृति के रूप में सहेजने के लिए, किसी SpatialPoints
ऑब्जेक्ट में कनवर्ट करें , इसे सही समन्वय प्रणाली संदर्भ (अपने रेखापुंज के समान) दें और सहेजें:
> coordinates(pts)=~x+y
> proj4string(pts)=CRS("+init=epsg:4326") # WGS84 lat-long here
> shapefile(pts,"/tmp/pts.shp")
यह एक आकृति का निर्माण करेगा जिसमें विशेषता के रूप में सेल नंबर और ऑफ़सेट शामिल हैं।