如何计算跨轨道错误(GPS /核心位置)

时间:2010-10-22 13:46:57

标签: iphone ios xcode

有谁知道如何确定“交叉跟踪错误”?

对于那些不熟悉的人:你正沿着从“A”点到“B”点的一条线开车。在运输过程中,当您偏离该线时,从当前位置到线的距离是交叉跟踪误差。

我现在有一个简单的算法,使用基本几何与三个点的纬度和经度 - 问题是它不考虑“大圆”计算(即实际米每度经度变化取决于您的纬度,并且不等于纬度的宽度。)

换句话说 - 如果您知道用于确定此问题的“大圆圈”公式,请告诉我 - 但这不是直接的笛卡尔几何问题。

5 个答案:

答案 0 :(得分:3)

您正在寻找的答案是:

http://www.movable-type.co.uk/scripts/latlong.html

(“跨轨道距离”一节)

答案 1 :(得分:2)

布拉德,

我不确定你使用哪种椭球模型,因为你没有说。如果您在当前计算中没有使用椭圆体模型,您可能会发现这有用:

http://www.movable-type.co.uk/scripts/latlong-vincenty.html

Vincenty算法比Haversine算法更准确。

一旦A-B,A-C和B-C的距离准确,就应该直截了当地确定从C到A-B线的距离。类似于从A-B到C点的距离的二元搜索,寻找最短的值。

詹姆斯

答案 2 :(得分:1)

如果处理纬度和经度,您正在寻找的公式是“Haversine”公式。它考虑了地球表面的曲率。

http://en.wikipedia.org/wiki/Haversine_formula

祝你好运。

答案 3 :(得分:0)

这是从链接到已接受答案的文本-如果它消失了:

这是一个新问题:有时有人问我距大圆路径的距离(有时称为交叉轨迹误差)。

公式:dxt = asin( sin(δ13) ⋅ sin(θ13−θ12) ) ⋅ R

其中:

  • δ13是从起点到第三点的(角度)距离

  • θ13从起点到第三点都是(初始)

  • θ12从起点到终点都是(初始)

  • R是地球的半径

JavaScript:

var δ13 = d13 / R;
var dXt = Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12)) * R;

在这里,大圆弧路径由起点和终点确定-根据您要使用的初始数据,您可以使用上面的公式来获取相关的距离和方位角。 dxt的符号告诉您第三点在路径的哪一边。

从起点到路径上最接近点到第三点的沿轨距离为:

公式:dat = acos( cos(δ13) / cos(δxt) ) ⋅ R

其中:

  • δ13是从起点到第三点的(角度)距离
  • δxt是(角度)跨轨距离
  • R是地球的半径

JavaScript:

var dAt = Math.acos(Math.cos(δ13)/Math.cos(dXt/R)) * R; 

答案 4 :(得分:-1)

CLLocation API提供

- (CLLocationDistance)distanceFromLocation:(const CLLocation *)location

使用公式(它没有指定是否为Haversine或 文森特或其他)考虑到地球的曲率。这将返回2个CLLocations之间的距离(以米为单位),但不会考虑任何高度差异。