如何计算行进距离

时间:2011-11-15 06:11:38

标签: android location

我正在开发一个应用程序,我需要计算行进的距离。我在计算距离时遇到问题。 这是我的代码:

 locationmanager.requestLocationUpdates(bestProvider,0,0,new Listener());

 public class Listener implements LocationListener{

@Override
public void onLocationChanged(Location location) {
    if(location!=null) {
        if(loc1==null) {
            loc1=new Location(location);
        }

        speed=location.getSpeed()*3.6;
        loc2=new Location(location);
        dist+=loc1.distanceTo(loc2);
        loc1=loc2;
        breaktv.setText(""+dist/1000);

我的目的是计算乘车或其他东西的总行驶距离。但distanceTo()方法对我来说效果不佳。

2 个答案:

答案 0 :(得分:2)

从技术上讲它应该有效。

我有一些建议:

  • dist必须为float(如果尚未加入)
  • dist += loc2.distanceTo(location),无需创建loc1

这是我用过的代码

                if(lastLoc != null)
                {
                    ttf = (location.getTime() - lastLoc.getTime()) / 1000;
                    int R = 6371;
                    double lat1 = Math.PI / 180.0 *lastLoc.getLatitude();
                    double lon1 = Math.PI / 180.0 *lastLoc.getLongitude();
                    double lat2 = Math.PI / 180.0 *location.getLatitude();
                    double lon2 = Math.PI / 180.0 *location.getLongitude();
                    //  double dLon = Math.PI / 180.0 * (location.getLongitude() - lastLoc.getLongitude());
                    double dLat = (lat2-lat1);
                    double dLon = (lon2-lon1);
                    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                    Math.cos(lat1) * Math.cos(lat2) * 
                    Math.sin(dLon/2) * Math.sin(dLon/2); 
                    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
                    double d = R * c;
                   totalDistance += d;

                }

                lastLoc = location;

答案 1 :(得分:1)

这是另一个 Question on SO ,其中我发布了2个Answers,一个用于User Defined函数以获取距离,而另一个用于用户android.Location类方法来计算它。 希望这会对你有所帮助。

当您开始使用 CurrentLocation 并存储时,可能正在使用 SharedPreferences , 然后我认为你需要不断更新行进的距离, 您只需使用 OnLocationChanged 相同的方式并调用上面提到的两个方法来了解当前行进的距离。

编辑: 这是一个可以帮助您的好例子, Link To OpenSource Project