计算3D(NED)地理坐标(纬度,长度,深度)之间的距离

Don*_*ott 2 math trigonometry r

众所周知,Haversine公式是计算地理坐标之间距离的有用机制.显然,R中有某些包提供了进一步的改进; 考虑到地球的椭球性质.

然而,我找不到的是找到NED坐标之间直线距离的任何方法:即纬度,经度和深度.

这种类型的距离计算对于研究在海洋深处或地壳下发生的事件至关重要.

有人知道在球体上协助这种类型的距离计算的方法吗?在地球上?如果没有,有没有人有任何想法,这个问题的最佳三角方法是什么?

Jos*_*ien 6

在笛卡尔坐标系中,线性距离更容易计算,因此第一步是将NED坐标(即长纬高度)坐标转换为某些此类系统.在开源世界中,PROJ4的"geocent"投影在一个正交的xyz坐标系中以米为单位给出位置,是一个不错的选择.

Simon Urbanek的proj4包提供了一种很好的轻量级方法来完成转换.为了演示它的用法,我将编写一个小包装函数,在NED坐标中取两个点,并以米为单位计算它们的间隔.(一个复杂因素是ptransform()期望它的纬度和经度坐标以弧度为单位;因此180/pi在函数的第一行和第二行中划分.)

library(proj4)
findDist <- function(x=c(0,0,0), y=c(0,0,0)) {
    x <- matrix(x/c(180/pi, 180/pi, 1), ncol=3)
    y <- matrix(y/c(180/pi, 180/pi, 1), ncol=3)
    xx <- ptransform(x, src.proj="+proj=longlat +ellps=WGS84",
                        dst.proj="+proj=geocent +ellps=WGS84")
    yy <- ptransform(y, src.proj="+proj=longlat +ellps=WGS84",
                        dst.proj="+proj=geocent +ellps=WGS84")
    sqrt(sum((yy-xx)^2))
}

## A sanity check. (Find distance between two points at 0°N 0°E, one on the
## surface and one 100m below the surface (i.e. at a height of -100m).)
findDist(c(0,0,0), c(0,0,-100))
## [1] 100

## Distance from North to South Pole
findDist(c(0,90,0), c(0,-90,0))
## [1] 12713505

## Diameter of the earth at its equator
findDist(c(0,0,0), c(180,0,0))
## [1] 12756274
Run Code Online (Sandbox Code Playgroud)

  • @DonScott是的,它计算形式为'c(lat,lon,height)`的两点之间的直线距离.高度变量是深度坐标 (3认同)
  • 谢谢@Chris,这是完全正确的.我在"健全检查"示例上面添加了一条评论,该示例应该澄清那样,并且应该输入深度(以米为单位)作为"负高度". (3认同)