我有一个相当复杂的问题,我真的不知道从哪里开始。我有一组空间点(X&Y)坐标,其中还包括信息(高度)。
set.seed(12345)
X = runif(100, 0, 45)
Y = runif(100, 0, 45)
Height = runif(100, 6, 9)
data <- data.frame("X" = X, "Y" = Y, "Height" = Height)
data$Radius_max = 1/3 * data$Height
坐标看起来像这样:
ggplot(data, aes(X, Y)) +
geom_point()
对于每个点,我需要一个按高度缩放的缓冲区。缓冲区是一个按高度缩放的方程式,但实际上是类似于圆锥形的圆形缓冲区。以下是确定每个点的缓冲区大小的步骤:
从初始点开始的原因是每个跟随的半径将受到相邻点的限制(随机生成的点可能会或可能不会有此效果)。圆锥体不能在另一个圆锥体下面。想想树。如果可能的话,我想知道以45度为增量的半径。
我对任何解决方案都可以,并且怀疑可能有一种方法可以解决空间包装问题,而不是手工完成。我从哪里开始?
答案 0 :(得分:0)
我不太确定你在追求什么。特别是45度增量。您是否希望缓冲区是圆形的?如果是这样,也许下面是解决方法。
您的示例数据
set.seed(12345)
X <- runif(100, 0, 45)
Y <- runif(100, 0, 45)
Height <- runif(100, 6, 9)
data <- data.frame("X" = X, "Y" = Y, "Height" = Height)
data$Radius_max <- 1/3 * data$Height
可能的解决方案
library(raster)
x <- pointDistance(data[,1:2], lonlat=FALSE)
diag(x) <- NA
mn <- apply(x, 1, min, na.rm=TRUE)
data$radius <- pmin(data$Radius_max, mn/2)
d <- SpatialPoints(data[, c('X', 'Y')], proj4string=CRS('+proj=utm +zone=1'))
b <- buffer(d, data$radius, dissolve=FALSE)
plot(b)