使用动态缓冲区在空间点网格上进行迭代以找到R

时间:2018-09-09 20:01:25

标签: r spatial raster

我有一个相当复杂的问题,我真的不知道从哪里开始。我有一组空间点(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()

enter image description here

对于每个点,我需要一个按高度缩放的缓冲区。缓冲区是一个按高度缩放的方程式,但实际上是类似于圆锥形的圆形缓冲区。以下是确定每个点的缓冲区大小的步骤:

  1. 将左下角的点设置为radius_max。
  2. 找到相对于下一点的任意给定点的半径的交点。
  3. 多次执行此操作,以相对于新的相邻半径重新设置初始点的新半径。

从初始点开始的原因是每个跟随的半径将受到相邻点的限制(随机生成的点可能会或可能不会有此效果)。圆锥体不能在另一个圆锥体下面。想想树。如果可能的话,我想知道以45度为增量的半径。

我对任何解决方案都可以,并且怀疑可能有一种方法可以解决空间包装问题,而不是手工完成。我从哪里开始?

1 个答案:

答案 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)