2016-01-24 10 views
5

से बफर के भीतर लाइन घनत्व की गणना करें क्या स्थानिक रेखाओं के आस-पास एक बफर के भीतर सड़क घनत्व (किमी/किमी²) की गणना करने का कोई तरीका है? सड़कों को एक रास्टर में पिक्सेल (1 पिक्सेल = 625 वर्ग मीटर) द्वारा दर्शाया जाता है। इसलिए मैंने rasterToContour(package raster) फ़ंक्शन का उपयोग करके सड़क पिक्सेल को पॉलीलाइन में परिवर्तित करना शुरू कर दिया। फिर, मैं बफर (किमी में) और बफर क्षेत्र (किमी² में) के भीतर लाइनों की कुल लंबाई की गणना करने की सोच रहा हूं।रास्टर

## To create raster: 
library(raster) 
library(rgeos) 
r <- raster(ncols=90, nrows=50) 
values(r) <- sample(1:10, ncell(r), replace=TRUE) 

## Road raster 
r[r[] < 10] <- 0 
r[r[] >= 10] <- 1 
plot(r) 

## To create spatial lines 
line1 <- rbind(c(-125,0), c(0,60)) 
line2 <- rbind(c(0,60), c(40,5)) 
line3 <- rbind(c(40,5), c(15,-45)) 
line1_sp <- spLines(line1) 
line2_sp <- spLines(line2) 
line3_sp <- spLines(line3) 

## To create buffer around lines 
line2_buff <- gBuffer(line2_sp, width=20) 
plot(line2_sp,add=T) 
plot(line2_buff,add=T) 
+4

डुप्लीकेट प्रश्न: http://gis.stackexchange.com/questions/177869/calculate-line-density-within-a-buffer- सभी एक साथ, किमी में बफर के क्षेत्र^2 द्वारा दिया जाता है इन-आर – RobertH

उत्तर

5

आप बफर क्षेत्र (वर्ग किलोमीटर) द्वारा विभाजित सड़क की लंबाई (किलोमीटर) की तलाश में हैं, है ना? सड़क की लंबाई की गणना करने के लिए, आप rasterToContour() के साथ अपनी विधि का उपयोग कर सकते हैं, हालांकि यह आपके द्वारा प्रदान किए गए उदाहरण के साथ पुन: उत्पन्न नहीं होता है।

लेकिन वर्ग किलोमीटर में बफर के क्षेत्र की गणना करने के लिए, आप n <- length(extract(r, line2_buff))n बफर में पिक्सल की संख्या प्राप्त करने के लिए कर सकते हैं, जो 625 मीटर^2 प्रत्येक हैं। आपको जिस रूपांतरण कारक की आवश्यकता है वह 1 किमी^2 = 1,000,000 मीटर^2 है।

length(extract(r, line2_buff)) * 625/1000000 
+0

आपको बहुत धन्यवाद। विशेष रूप से, मुझे सड़क की लंबाई (किलोमीटर) की गणना करने में समस्या है क्योंकि फ़ंक्शन 'रास्टरटोकॉटोर() 'सड़क के किनारे किनारों और सड़क के दाहिने तरफ किनारों के साथ सड़क किनारों को देता है। मैं एक सड़क से गुज़रने वाली रेखा रखना पसंद करूंगा (यानी, सड़क पिक्सेल के केंद्र से गुज़रना)। – Marine

+0

क्या आप एक किनारे की लंबाई की गणना करने के लिए केवल 2 से विभाजित नहीं कर सकते? – rsoren

+0

बफर के किनारे एक सड़क से बफर के अंदर एक सड़क को आप कैसे अलग करेंगे? एक मामले में आपको इसे 2 से विभाजित करना होगा, दूसरे में, आप नहीं कर सकते। –

4

समारोह है कि आप एक लाइन और एक बहुभुज के बीच चौराहे पाने के लिए देख रहे हैं gIntersection है (इस लिंक http://robinlovelace.net/r/2014/07/29/clipping-with-r.html देखें):

r <- raster(rast_path) 
x <- rasterToContour(r) 

यहाँ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है। हालांकि, यदि आप एक बफर को पार करने वाली सड़क की सीमा को जोड़ते हैं तो आप सड़क की लंबाई से दोगुनी गिनती करेंगे (बाएं तरफ + सड़क के दाएं किनारे)।

समस्या यह है कि एक रास्टर को सड़क मानचित्र (रेखाओं) में कनवर्ट करना उतना आसान नहीं है जितना इसे बहुभुज में परिवर्तित करना है (आप रास्टरटोकॉटोर के साथ क्या प्राप्त करेंगे)। और बहुभुज में कनवर्ट करने से आपको वह परिणाम नहीं मिलेगा जिसे आप ढूंढ रहे हैं (जैसा कि पहले बताया गया था)। इसलिए, आपको इसे मैन्युअल रूप से करना होगा या कोडिंग में कुछ अतिरिक्त समय निवेश करना होगा (उदाहरण के लिए Identify a linear feature on a raster map and return a linear shape object using R) "skeletonizing रास्टर" की खोज करें)।

मुझे लगता है कि सामान्य दृष्टिकोण क्षेत्र के आधार पर काम करना है (किमी 2/किमी 2) और आप इसे रास्टर प्रारूप पर आसानी से कर सकते हैं। यदि आपका संकल्प पर्याप्त है, तो आप किमी/किमी 2 के मूल्य का अनुमान लगाने के लिए बाद में (सड़कों का क्षेत्र)/(सड़क की औसत चौड़ाई)/(बफर क्षेत्र) कर सकते हैं।

संबंधित मुद्दे