在R中计算具有经度、纬度和海拔的两点之间的距离

11

是否有一个包可以计算两个点之间的空间距离,同时考虑高程。因此,对于每个点,我们将拥有纬度、经度和海拔高度信息。到目前为止,我只能编写以下函数:

library(geosphere)  
distance3D <- function (point1, point2) {
      planiDist <- distm(point1[1:2], point2[1:2])
      altiDist <- point2[3] - point1[3]
      dist3D <- sqrt(planiDist^2+altiDist^2)
      return(dist3D)
    }

我只是想知道是否有一个函数存在于R包中。


1
这里有一个链接可以找到FORTRAN代码:https://stackoverflow.com/questions/11710972/great-circle-distance-plus-altitude-change。显然,你可以在R中运行Fortran函数:https://www.r-bloggers.com/fortran-and-r-speed-things-up/,但我从未尝试过。也许你已经知道了,但是你当前的函数不准确。你不能使用欧几里得距离公式来计算球面上的点之间的距离。如果你画出等高路径和点对点路径的“三角形”(实际上并不是,因为线是弯曲的),你会发现连接它们的线不是正交的。 - IceCreamToucan
绝对正确!我的计算不准确。我正在进行一个近似,因为我有一个三角形。 - Liky
这篇帖子可能会有用! - Adelmo Filho
@Koot6133,你提到的链接适用于具有XYZ坐标的情况。而在我的情况下,我有纬度、经度和海拔高度。 - Liky
你可以使用Haversine算法 https://rdrr.io/github/michaelmalick/r-malick/src/R/haversine.R ,但它并没有考虑高度差,你可以通过使用欧几里得距离来解决这个问题。 - Vivek Katial
显示剩余2条评论
1个回答

0

哈弗辛大圆距离可能是您正在寻找的。

library(geosphere)
distHaversine(p1, p2, r=6378137)


#p1, p2-longitude/latitude of point(s). Can be a vector of two numbers, 
     a matrix of 2    columns (first one is longitude, second is latitude) 
     or a   SpatialPoints* object
#r-radius of the earth; default = 6378137 m 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接