使用 GPS 坐标计算最短距离

Posted

技术标签:

【中文标题】使用 GPS 坐标计算最短距离【英文标题】:Shortest distance calculation using GPS Co - ordinates 【发布时间】:2011-12-16 10:39:04 【问题描述】:

我想知道 GPS 坐标的计算公式,最短距离计算精度 >= 5 mtr。

我已经检查过Haversine 公式和大圆距离公式。但它们适用于长距离计算。如果我们谈论 mtrs 的准确性,应该使用哪个公式?

【问题讨论】:

【参考方案1】:

Vincenty's formulae 在 WGS84 近似地球形状上精确到毫米级(显然,地球在这种程度上与 WGS84 不一致)。

几年前,我为distance calculation in javascript 实现了一些算法。由于代码缺少 cmets,请随时询问您是否对算法有任何疑问。

一个潜在的问题是,这些算法在海平面上工作并且没有考虑高度差异。改用convert to geocentrical cartesian coordinates 并使用直线距离可能会更好...

经度φ、纬度λ、高度h的点的直线距离d的直接表达式为

k = √(a²·cos²φ + b²·sin²φ)
r = (a²/k + h)·cosφ
z = (b²/k + h)·sinφ
d = √((z - z')² + r² + r'² - 2·r·r'·cos(λ - λ'))

使用以下参数值

a = 6378137m
b = (a·297.257223563)/298.257223563

【讨论】:

【参考方案2】:

如果 (long0, lat0) 是一个点, (long1, lat1) 是另一个:

对于小距离,您可以使用:

x0 = long0 * r_earth * cos(lat0)
y0 = lat0  * r_earth
x1 = long1 * r_earth * cos(lat1)
y1 = lat1  * r_earth
dx = x0 - x1
dy = y0 - y1
d = sqrt(dx*dx + dy*dy)

long = 经度弧度lat = 纬度弧度r_earth = 地球半径

您可以通过分解 r_earth 和/或假设 cos(lat0)==cos(lat1) 来进一步简化此公式。

【讨论】:

谢谢,我正在使用用于车辆跟踪器的 SIM18 GPS 模块。对于跟踪应用程序,我们需要准确的结果。是否适合跟踪应用。 @Prakesh:我不明白你的意思。你觉得不够准确吗?您说您不想使用大圆公式,因为您的距离很小。对于小距离,此公式将足够准确。如果它不符合您的要求,您必须使用大圆公式。 非常感谢。我会检查并回复你的结果。 @Tomalak Geret'kal:Prakash 说他对长距离不感兴趣。所以我假设人们可以忽略地球是椭球体,甚至忽略地球表面在特定的小距离内并不平坦。 @Curd:他根本没这么说。他所说的只是他想要体面的准确性。此外,即使在很短的距离内,如果您在该地区的地球半径值是错误的,那么您的三角函数也将是错误的。

以上是关于使用 GPS 坐标计算最短距离的主要内容,如果未能解决你的问题,请参考以下文章

计算 n 个 GPS 点之间的最短距离

如何计算两个GPS坐标点的距离?

计算大量 GPS 坐标之间的成对路由距离

用墨卡托和GPS坐标计算距离时误差测试

计算两个GPS坐标的距离

计算从一个 GPS 坐标到另一个坐标的距离?