嗨其他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中解决?我在不同的解决方案上搜索了很长一段时间,但还没找到任何有用的东西 在此先感谢您的帮助!
答案 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