【问题标题】:Calculate Distance Between 3D (NED) Geographic Coordinates (Lat, Long, Depth)计算 3D (NED) 地理坐标(纬度、经度、深度)之间的距离
【发布时间】:2016-01-25 19:02:21
【问题描述】:

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

但是,我找不到任何方法可以找到 NED coordinates 之间的直线距离:即纬度、经度和深度。。 p>

这种类型的距离计算对于研究深海或一般地壳下发生的事件至关重要。

有没有人知道一种方法可以帮助在球体上进行这种类型的距离计算?在地球上?如果没有,有没有人知道解决这个问题的最佳三角方法是什么?

【问题讨论】:

  • 我认为没有标准的公式可以做到这一点 - 如果我想从山的一侧到另一侧,“沿地球”的距离将远远大于等效距离一个平面 - 即使在这两种情况下 x delta、y delta 和深度都是相同的。
  • @Chris 我不确定我明白你的意思;肯定有解决办法。对于深海学和地球科学,需要计算海平面以下两点之间的距离。地形高度无关紧要。问题是将 NED 协调器映射到笛卡尔 3D 平面,然后计算适当的距离。
  • 也许我误解了你的要求。需要直线距离吗?如果你想要走在地板上的距离,当地的地形变得很重要
  • @Chris 是的,直线,记住 NED 坐标不在笛卡尔平面上。

标签: r math trigonometry


【解决方案1】:

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

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

【讨论】:

  • 需要注意的是这个函数没有考虑深度。你有推荐吗?
  • @DonScott 是的,它计算了c(lat, lon, height) 形式的两点之间的直线距离。高度变量为深度坐标
  • 谢谢@Chris,完全正确。我在“健全性检查”示例上方添加了一条评论,该评论应澄清事实如此,并且应将深度(以米为单位)输入为“负高度”。
猜你喜欢
  • 2011-09-16
  • 1970-01-01
  • 2014-12-16
  • 2015-08-14
  • 2016-02-03
  • 2015-11-05
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多