计算两点之间的距离

时间:2012-01-26 15:55:27

标签: android android-location

我正在制作一个应用程序,用于在用户跑步,骑车或步行时将其显示在屏幕上。 我知道android内置了distanceBetween函数,但这对于fittness应用程序来说是否足够准确? 我正在考虑使用Haversine公式或其他这样的公式来计算点之间的距离,我看到这些公式的唯一问题是它通常是直线或乌鸦飞行距离。 有没有人对此有所了解?

2 个答案:

答案 0 :(得分:1)

在他们行走时跟踪他们的路线将涉及一系列路点。如果您每隔10秒采样一个方向点,那么您可以使用像arersine这样的乌鸦飞行技术计算前一点和新点之间的距离,或者只是向谷歌地图等外部服务发出一些网络服务请求及其距离矩阵,可以使用建议的最佳路径为您提供2点之间的街对点距离。

http://code.google.com/apis/maps/documentation/distancematrix/

您只需要确保您的采样率不是太高,或者您可以超过2500 API调用/ 24小时期限速率(我认为这是每IP)。但是2500每10秒钟会给你一个样本7小时,或者你可以尝试更低的速率,比如每35秒1个,并且可能会错误地猜测路线,但保证你的设备不会超过2500个样本。

就个人而言,如果位置轮询是免费的,我会选择distanceBetween并每1-2秒轮询一次。这应该足够短,以至于GPS的准确性成为您最大的错误来源。

答案 1 :(得分:1)

Haversine公式对于大多数距离都是准确的,但是当点(几乎)是反对的时,它会遇到舍入误差。以下公式对于所有距离都是准确的。

> double delta = G1 - G2;  
>     double p1 = cos(L2) * sin(delta);
>     double p2 = cos(L1) * sin(L2) - sin(L1) * cos(L2) * cos(delta);  
>     double p3 = sin(L1) * sin(L2) + cos(L1) * cos(L2) * cos(delta);
>     distance = 60 * Math.atan2(Math.sqrt(p1*p1 + p2*p2), p3);

Here's an example and the implementation.

资源:Here