有谁知道如何确定“交叉跟踪错误”?
对于那些不熟悉的人:你正沿着从“A”点到“B”点的一条线开车。在运输过程中,当您偏离该线时,从当前位置到线的距离是交叉跟踪误差。
我现在有一个简单的算法,使用基本几何与三个点的纬度和经度 - 问题是它不考虑“大圆”计算(即实际米每度经度变化取决于您的纬度,并且不等于纬度的宽度。)
换句话说 - 如果您知道用于确定此问题的“大圆圈”公式,请告诉我 - 但这不是直接的笛卡尔几何问题。
答案 0 :(得分:3)
答案 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”公式。它考虑了地球表面的曲率。
祝你好运。答案 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之间的距离(以米为单位),但不会考虑任何高度差异。