2016-01-24 40 views
5

有沒有辦法計算空間線周圍緩衝區內的道路密度(km /km²)?道路由光柵中的像素(1像素= 625平方米)表示。所以我開始通過使用函數rasterToContour(package raster)將道路像素轉換成多段線。然後,我正在考慮計算緩衝區內的行的總長度(以km爲單位)和緩衝區(以km 2爲單位)。從柵格計算緩衝區內的線密度

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

這裏是一個重複的例子:

## 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由下式給出in-r – RobertH

回答

5

您正在尋找路段長度(公里)除以緩衝區(平方公里),對不對?要計算道路長度,您可以使用rasterToContour()的方法,但這不適用於您提供的示例。

但是要計算平方公里的緩衝區面積,你可以這樣做:n <- length(extract(r, line2_buff))得到緩衝區中的像素數爲n,每個像素爲625平方公尺。您需要的換算係數爲1平方公里^ = 1,000,000平方公尺。

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

非常感謝rsoren。特別是,我有一個計算道路長度(公里)的問題,因爲函數'rasterToContour()'給出道路左邊和右邊的道路邊緣。我寧願有一條穿過道路的線(即穿過道路像素的中心)。 – Marine

+0

你能不能只用2除以計算一條邊的長度? – rsoren

+0

如何區分緩衝區內的道路與緩衝區邊緣的道路?在一種情況下,你必須除以2,而在另一種情況下,你不能。 –

4

,你是希望得到一個線和多邊形之間的交叉功能是gIntersection(見本鏈接http://robinlovelace.net/r/2014/07/29/clipping-with-r.html)。但是,如果您將通過緩衝區的道路邊界相加,則您將計算道路長度的兩倍(左側+道路右側)。

問題是,將光柵轉換爲道路圖(線)並不像將它轉換爲多邊形那樣簡單(您將使用rasterToContour獲得)。並且轉換爲多邊形不會給你你想要的結果(如前所述)。因此,您必須手動執行此操作,或者在編碼中投入一些額外時間(搜索「鏤空柵格」,例如Identify a linear feature on a raster map and return a linear shape object using R)。

我認爲通常的做法是以面積爲基準(km2/km2),並且可以在光柵格式上輕鬆完成。如果您的分辨率足夠好,您可以稍後(道路面積)/(道路的平均寬度)/(緩衝區域)嘗試將值近似爲km/km2。