R中的三维交叉(空间分析)

时间:2017-08-14 13:55:35

标签: r 3d spatial intersection

嗨其他R爱好者,

我无法在R中找到几何问题的解决方案。我有一个栅格数据集,它代表一个有障碍物的地形(障碍物是5米)。

 dat1=list()
 dat1$x=seq(481018,by=10,len=10)
 dat1$y=seq(5628255,by=10,len=10)
 dat1$z=matrix(c(rep(1,40),rep(5,20),rep(1,40)),10,10)
 r=raster(dat1)
 crs(r) <- "+proj=utm +zone=32 +datum=WGS84"

此外,我还有一个与 MAYBE 相交的空间线数据框。该线的一个点位于障碍物下方(2 m),一个位于上方(7 m)。

x <- c(481060,481060)
y <- c(5628340,5628260)
line <- SpatialLines(list(Lines(Line(cbind(x,y)), ID="a")))
line <- SpatialLinesDataFrame(sl = line, data = data.frame("p1"=2,"p2"=7),   match.ID = FALSE)
proj4string(line) <-CRS("+proj=utm +zone=32 +datum=WGS84")

可以在此处找到可视化:3D Intersection of raster and spatial line

如何找出线与障碍物相交的位置和位置?这是一个3D问题还是也可以在2D中解决?我在不同的解决方案上搜索了很长一段时间,但还没找到任何有用的东西 在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

有一个简单的解决方案,但肯定不是最有效的解决方案。假设栅格中单元格的值是高度。

slope <- (line@data[1,2]-line@data[1,1])/dist(cbind(x,y))

给出线条经过的每个单元格的高度,以及稍后我们需要的单元格数字。

下一步是计算这些单元格中线条的高度。由于您有开头和结尾,因此可以计算斜率。

cellcenters <- xyFromCell(r, e[,1], spatial=FALSE) #find the coordinates for the center of the cell
dists <- spDistsN1(cellcenters, c(x[1],y[1]), longlat = FALSE) #calculate the distance to the beginning of the line
height <- dists*slope

现在我们有斜率,我们可以根据到第一个点的距离计算每个单元格的线高。

any(height<=e[,2])

现在要找到交叉点,我们只看到线的高度小于或等于从栅格中提取的值:

one