使用GPS计算距离:如何考虑精度差异

时间:2013-08-13 08:56:20

标签: algorithm math gps geometry

我正在开发一种基于GPS计算距离的移动应用程序。我使用以下hasrsine函数来计算距离。

var R = 6371; // Radius of the earth in km
      var dLat = deg2rad(lat2-lat1);  // deg2rad below
      var dLon = deg2rad(lon2-lon1); 
      var a = 
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c; // Distance in km

我关心的是如何处理不同的位置准确度值。

即,首先我获得一个精度为30米的位置,然后我得到一个精度为150米的位置。

为了获得更好的距离计算,我需要考虑/避免距离计算的哪个位置?或者如何使用上述公式在我的计算中调整这些准确度差异?

我希望得到专家的建议。

2 个答案:

答案 0 :(得分:2)

任何像你的公式,或智能手机API内置的公式都足够精确到小距离,如GPS位置到下一个位置距离计算。

但主要的不是距离公式 您需要过滤GPS位置,不应简单地计算从一个位置到下一个位置的距离。

否则,特别是在低速移动时,您将总结一条锯齿形的预制GPS轨迹线。

答案 1 :(得分:1)

一般来说,这并不容易..正如在评论中提到的那样,“距离”在这方面可能会有很多不同的东西,具体取决于你的坐标。有几个地球椭圆'模型'所以你应该考虑这个然后编写你的算法。

对于GPS,它是WGS84投影。如果您需要快速有效的解决方案,请查看Proj4库,其中包含所有这些内容并且几乎可以绑定所有内容。

最好的方法是将您的协调转换为米(但是您应该考虑区域),然后使用直角坐标进行计算。你可能想查看here。它提出了几种解决方法。

不准确,但会在非极端位置和小距离上完成工作。 (永远不要使用任何适当的导航软件),但.. ..

10001.965729km = 90 degrees
1km = 90/10001.965729 degrees = 0.0089982311916 degrees
10km = 0.089982311915998 degrees