gpt4 book ai didi

algorithm - GPS坐标的多点定位

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:53:13 24 4
gpt4 key购买 nike

我有 N 个 GPS 坐标,距离为 N 个我想确定的未知位置。

我的第一个方法是只使用三个点和三边测量,完全按照描述 here .这种方法已经很准确了(最佳误差~5km),但我想改进它并增加鲁棒性。因为给定的距离一开始就不是很准确,所以我考虑使用多次测量和多边测量。然而,事实证明,尽管我提供了超过 3 个点/距离(测试最多 6 个),但这种方法的准确性要低得多(最佳误差~100 公里),现在我要问,如果有人知道我可以拥有什么做错了。

简而言之,我的多点定位方法如下:

  1. 将所有坐标转换成ECEF
  2. 按照 wikipedia 的公式 7 中的描述构建一个矩阵
  3. 使用 SVD 找到最小值
  4. 由于解决方案只是按比例缩放,我使用求根方法来确定归一化,以便将坐标转换回 LLA 导致高度为 0(我的初始假设是所有坐标都处于零高度)
  5. 转换回 LLA

LLA/ECEF 转换经过双重检查并正确无误。第 2 步和第 3 步我已经用欧几里得坐标(和精确距离)进行了检查并且看起来是正确的。我自己想出了第 4 步,我完全不知道这是否是一个好方法,所以欢迎提出建议。

+++更新

我已经在 python 中整理了示例代码来说明问题有一些基本事实。三边测量最接近 400m,而此处的多点定位范围为 10-130 公里。由于篇幅原因,我把它放在了ideone

最佳答案

最终,我自己弄明白了 - 或者至少显着提高了准确性。

维基百科 (Eq.7) 中描述的方法显然不太适合此应用程序,但在这种情况下它已经容易得多。

考虑方程。 6 来自维基百科,我们可以简化很多: R_0 可以猜测为地球半径,因为ECEF坐标的原点位于地球中心。因此,无需移动所有内容以将一个点作为原点,我们可以使用所有 N 方程。

在 python 中,使用 P 一个 ECEF 坐标数组和 dists 到这些点的距离,这一切都归结为

R = 6378137 # Earth radius in meters
A = []
for m in range(0,len(P)):
x = P[m][0]
y = P[m][1]
z = P[m][2]
Am = -2*x
Bm = -2*y
Cm = -2*z
Dm = R*R + (pow(x,2)+pow(y,2)+pow(z,2)) - pow(dists[m],2)
A += [[Am,Bm,Cm,Dm]]
# Solve using SVD
A = numpy.array(A)
(_,_,v) = numpy.linalg.svd(A)
# Get the minimizer
w = v[3,:]
w /= w[3] # Resulting position in ECEF

通过这种方法,我描述的第 4 步 不再是必需的。事实上,它甚至会使解决方案变得更糟。

现在,精度范围在 2km 到 275m 之间——在大多数情况下优于误差为 464m 的“最佳”三边测量。

关于algorithm - GPS坐标的多点定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8318113/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com