【问题标题】:3D intersection in R (spatial analysis)R 中的 3D 交叉点(空间分析)
【发布时间】:2017-08-14 13:55:35
【问题描述】:

各位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 中解决?我在不同的解决方案上搜索了很长一段时间,但还没有发现任何有用的东西。
提前感谢您的帮助!

【问题讨论】:

    标签: r 3d spatial intersection


    【解决方案1】:

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

    e<-extract(r,line,cellnumbers=T)[[1]]
    

    给出线条通过的每个单元格的高度,以及我们稍后需要的单元格编号。

    下一步是计算这些单元格中线条的高度。既然你有开始和结束,你可以计算斜率。

    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])
    

    【讨论】:

    • 感谢您的快速响应,但在此解决方案中没有考虑对象高度。如果线在上方,则可能与障碍物没有交集。
    • 你是对的。我以为 5 是高度,但我完全忘记考虑线的高度。我将编辑问题,看看是否有帮助。
    • 非常感谢!这就是我一直在寻找的。为了比较高度,我将 basehight 添加到 height &lt;- (dists*slope)+line@data[1,1] 行。
    • 您对如何使用多边形而不是直线有什么建议吗?这对于检查区域障碍物很有用。例如ext_poly &lt;- as(extent(r), "SpatialPolygons") 我能想到的唯一选择是使用平行线来获得正确的高度。
    猜你喜欢
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多