三角测量GPS坐标

5

假设你有n个GPS坐标,如何计算它们之间的中心GPS点呢?


定义“中心点”?您想要凸包周围的任何点、几何中心还是其他什么? - Paul Tomblin
我只是试图根据已知的WiFi接入点的GPS坐标和我可以从它们那里获取的信号来估算我的位置。 - Malachi
在这种情况下,您可能希望执行最小二乘拟合,就像GPS本身所做的那样。但这很复杂。 - Paul Tomblin
2
在你能够获取WiFi的范围内,你可以假设每个GPS点都在一个平面上。 - Pete Kirkham
2个回答

10

如果有人现在或将来需要帮助,这里提供一个算法,即使是在极点附近的点也是有效的(如果它有效的话,也就是我没有犯愚蠢的数学错误的话):

  1. 将纬度/经度坐标转换为三维笛卡尔坐标:

x = cos(lat) * cos(lon)
y = cos(lat) * sin(lon)
z = sin(lat)
  • 计算x的平均值、y的平均值和z的平均值:

  • x_avg = sum(x) / count(x)
    y_avg = sum(y) / count(y)
    z_avg = sum(z) / count(z)
    
  • 将该方向转换回纬度和经度:

  • lat_avg = arctan(z_avg / sqrt(x_avg ** 2 + y_avg ** 2))
    lon_avg = arctan(y_avg / x_avg)
    

    但我想你提出了一个问题,实际的实现可能会使用arctan2(num,denom)函数。 - David Z
    我刚试着实现了这个,经度没问题,但纬度偏差很大。一直检查我的代码,看起来没问题,是我太累了还是算法有误? - Adam Taylor
    我刚刚重新检查了一下(在Mathematica中实现),对我来说似乎运行良好...请确保pi/2弧度(或+90度)纬度是北极,0是赤道,-pi/2(或-90)是南极。 - David Z
    我也没有理解你的第二条评论,所以我忽略了它。我猜那可能是一个错误的决定? - Adam Taylor
    关于arctan2函数?那只有当x_avg为0时才会有所不同,所以我怀疑这不是你的问题。或者如果你在谈论度/弧度的问题:如果你正在处理角度,你需要乘以180/Math.PI。如果这没有帮助,也许你应该发起一个新的问题来解决它。 - David Z
    显示剩余2条评论

    4

    要看你指的中心GPS点是什么意思。你可以简单地取所有点的平均值,就像Stephen建议的那样 - 但请记住,GPS坐标不连续 - 在极地等断点处这种方法会出现异常。

    在大多数情况下,您需要转换到没有这个问题的坐标系。

    您还可以查看由它界定的所有点,计算到每个GPS点的距离,并将所有GPS点的距离之和最小化。您需要研究大圆计算。

    此外,每个GPS可能具有更高或更低的不确定度,您应该考虑并相应地加权。

    你到底想找出什么?

    -Adam


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接