迭代空间点网格与动态缓冲区在R中找到交集

问题描述 投票:-1回答:1

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

我对任何解决方案都没问题,并怀疑可能有办法用空间包来做这个,而不是手工做一些。我从哪里开始?

r spatial raster
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.