我正在开发一种基于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米的位置。
为了获得更好的距离计算,我需要考虑/避免距离计算的哪个位置?或者如何使用上述公式在我的计算中调整这些准确度差异?
我希望得到专家的建议。
答案 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