2011-11-15 114 views
1

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

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()方法对我来说效果不好。

+0

“对我来说效果不好”并没有让我们继续前进。你在看什么?你怎么知道它不工作? – bdares

+0

什么是问题和输入是什么?欧几里德距离通常很容易计算(使用平方根,平方,加法,坐标减法)? –

+0

这里我经常要求更新。所以onLocationChanged()将在每次出现位置变化时调用。在计算距离时我在代码的这个点上面临问题。我每次都在这里添加距离,是否正确。 ? loc2 =新位置(位置); dist + = loc1.distanceTo(loc2); loc1 = loc2; breaktv.setText(“”+ dist/1000); – Taruni

回答

1

这里是另一个Question on SO,我已经发布了2个回答一个用户自定义函数来获得的距离等,以用户android.Location类方法来计算。 希望这会帮助你。

当您启动jurney采取CurrentLocation和存储可以使用SharedPreferences, 那么我想你需要时间可持续不断更新的行驶距离, 你只需要使用OnLocationChanged同样的方式调用从上面提到的两个方法来了解当前旅行距离。

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

+0

Hii Frankenstein谢谢你的回复。这正是我想要做的。我将loc1对象中的前一个位置和loc2中的新位置存储起来,并且我试图在distanceTo()方法中使用这两个对象,并添加每次都会有结果。我会朝着正确的方向发展吗? – Taruni

+0

我没有看到任何问题...请参阅更新的ans我添加了一个链接。 – MKJParekh

+0

谢谢弗兰肯斯坦,我可以从该链接下载项目吗? – Taruni

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; 
+0

+1你好,请你看看这个问题,我一直在寻找这个很长的时间http://stackoverflow.com/questions/7696112/gettting-different-distance-when-using-the-google-map-and-user-defined-function/8050014#8050014 ..也如果你发布任何东西..请也对我的回答做一个评论,所以我知道。 – MKJParekh

+0

里诺谢谢你的密码,我会尽力的。 – Taruni