从栅格

时间:2016-01-24 17:55:29

标签: r r-raster

有没有办法计算空间线周围缓冲区内的道路密度(km /km²)?道路由光栅中的像素(1像素= 625平方米)表示。所以我开始使用函数rasterToContour (package raster)将道路像素转换为折线。然后,我正在考虑计算缓冲区内的行总长度(以km为单位)和缓冲区(以km²为单位)。

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)

2 个答案:

答案 0 :(得分:5)

你正在寻找道路长度(公里)除以缓冲区(平方公里),对吧?要计算道路长度,您可以将方法与rasterToContour()一起使用,尽管这与您提供的示例无法重现。

但是要以平方公里计算缓冲区的面积,您可以执行:n <- length(extract(r, line2_buff))以获得缓冲区中n个像素数,每个像素数为625平方公尺。您需要的转换因子是1平方公里^ = 1,000,000平方公尺。总之,缓冲区的面积(km ^ 2)由下式给出:

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

答案 1 :(得分:4)

您希望获得直线和多边形之间交点的函数是gIntersection(请参阅此链接http://robinlovelace.net/r/2014/07/29/clipping-with-r.html)。但是,如果您对穿过缓冲区的道路的边界求和,您将计算道路长度的两倍(左侧+道路的右侧)。

问题在于将栅格转换为道路地图(线条)并不像将其转换为多边形(使用rasterToContour获得的那样)一样简单。转换为多边形不会为您提供您正在寻找的结果(如前所述)。因此,您必须手动完成或在编码中花费一些额外的时间(搜索&#34;捣乱栅格&#34;,例如Identify a linear feature on a raster map and return a linear shape object using R)。

我认为通常的方法是以面积为基础(km2 / km2),你可以在光栅格式上轻松完成。如果您的分辨率足够好,您可以稍后(道路面积)/(道路的平均宽度)/(缓冲区域)尝试将该值近似为km / km2。