为spatiallinesdataframe创建可变宽度缓冲区

时间:2018-01-19 01:21:06

标签: r spatial

我想为spatiallinesdataframe创建一个可变宽度的缓冲区。我有一个带有width属性的road shapefile,我想将我的道路缓冲区作为基础。例如,如果我有一个5米宽的路段,我希望我的缓冲区每侧2.5米。如果我有10米宽的路段,我希望我的缓冲区每边5米,等等。

目前,我知道两个缓冲函数:rgeos :: gBuffer和raster :: buffer,但两者都只根据单个值(我知道)创建一个缓冲区。有谁知道我可以用这个功能吗?

我想做这样的事情:

rdWidth< - roads.width $ WIDTH / 2

roads.buff< - buffer_function(roads.width,width = rdWidth)

1 个答案:

答案 0 :(得分:1)

你可以循环不同的道路宽度

示例数据:

library(raster)
cds1 <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60))
cds2 <- rbind(c(-10,0), c(140,60), c(160,0), c(140,-55))
cds3 <- rbind(c(-125,0), c(0,60), c(40,5), c(15,-45))   
lns <- spLines(cds1, cds2, cds3, attr=data.frame(width=2*(1:3)))

解决方案:

w <- unique(lns$width)
b <- list()
for (i in 1:length(w)) {
    x <- lns[lns$width==w[i], ]
    b[[i]] <- buffer(x, w[i])
} 
bb <- do.call(bind, b)

plot(bb)