-1

我正在编写一个应用程序,我必须在跑步时显示跑过的距离。我使用 LocationListener 的函数“public void onLocationChanged”。当用户点击一个按钮并开始跑步时,我想显示他覆盖的距离更新到他所在的点。

我写了这段代码:

public void onLocationChanged(Location location) { 
    if(location != null) { 
        if(location.hasSpeed()){ 
            if(latitude1 == 0 && longitude1 == 0){
                latitude1 = (location.getLatitude()*Math.PI)/180;
                longitude1 = (location.getLongitude()*Math.PI)/180;
            } else{
                latitude2 = (location.getLatitude()*Math.PI)/180;
                longitude2 = (location.getLongitude()*Math.PI)/180;
                distance = (6372.795477598)*Math.acos(Math.sin(latitude1)
                           *Math.sin(latitude2)+Math.cos(latitude1)
                           *Math.cos(latitude2)*Math.cos(longitude1-longitude2));
                sumDistance += distance;
                latitude1 = latitude2;
                longitude1 = longitude2;
            }

            tv.setText("Distance covered=" + sumDistance + " m"); 
        } 
    } 
}

准确吗?

4

2 回答 2

2

只是一个建议:

  • 当用户单击相应按钮时,存储开始位置和结束位置的纬度和经度。
  • 然后您可以使用distanceBetweendistanceTo来获取这两个地理点之间的距离。

PS:如果用户在同一点开始和结束他的跑步,这可能不起作用;)

添加:

检查本教程

于 2013-06-07T10:19:39.440 回答
0

最近谷歌改进了其基于位置的 API。他们将传感器与基于位置的 api 融合在一起,分享如何使位置更准确(效率提高约 4 倍)和消耗更少的功率(降低 10 倍)的示例。

一些有趣的链接供您浏览,视频 google io

关于如何使用 API 的 SO 链接在这里

于 2013-06-10T06:53:24.907 回答