我有一个相当复杂的问题,我真的不知道从哪里开始。我有一组空间点(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度的增量知道半径。
我对任何解决方案都没问题,并怀疑可能有办法用空间包来做这个,而不是手工做一些。我从哪里开始?
我不太清楚你在追求什么。特别是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)