我想为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)
答案 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)