我正在制作一个应用程序来跟踪用户跑步、骑自行车或步行并将其显示到屏幕上。我知道android内置了distanceBetween函数,但这对于健身应用程序来说足够准确吗?我正在考虑使用 Haversine 公式或其他此类公式来计算点之间的距离,我看到的关于这些公式的唯一问题是它通常是直线或乌鸦飞的距离。有人对此有任何想法吗?
问问题
1657 次
2 回答
1
在他们行走时跟踪他们的路线将涉及一系列航路点。如果您每 10 秒在 1 个路点进行采样,那么您可以使用像 hadrsine 这样的乌鸦技术计算前一点和新点之间的距离,或者只是向谷歌地图等外部服务及其距离发出一些网络服务请求矩阵,它可以使用建议的最佳路径为您提供 2 个点之间的捕捉到街道的距离。
http://code.google.com/apis/maps/documentation/distancematrix/
您只需要确保您的采样率不会太高,或者您可以超过 2500 个 API 调用/24 小时周期速率限制器(我相信这是每个 IP)。但是 2500 每 10 秒 1 个样本会给您 7 小时,或者您可以尝试较低的速率,例如每 35 秒 1 次,并冒着路线被猜错的风险,但要保证您的设备不会超过 2500 个样本。
就个人而言,如果位置轮询是免费的,我只会使用 distanceBetween 并每 1-2 秒轮询一次。这应该足够短,以使 GPS 的准确性成为您最大的错误来源。
于 2012-01-26T16:04:25.137 回答
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);
资源:这里
于 2012-01-26T16:07:57.877 回答