2012-08-05 109 views
2

我正在创建纬度/经度坐标的ArrayList,然后想要将它们全部取出并找出总行程。但我目前的代码一直返回0.有人可以告诉我我做错了吗?获取经纬度和纬度的距​​离

public float getDistanceTraveled() { 
    float[] dist = new float[1]; 
    float totalDist = 0; 

     for(int i = 0; locs.size()-2 >= i; i++) { 
      double lat1 = locs.get(i).getLatitude(); 
      double lon1 = locs.get(i+1).getLongitude(); 
      double lat2 = locs.get(i).getLatitude(); 
      double lon2 = locs.get(i+1).getLongitude(); 

      Location.distanceBetween(lat1, lon1, lat2, lon2, dist); 
      totalDist += dist[0]; 
      Log.d("", "totaldist " + String.valueOf(totalDist)); 

     } 
     return totalDist;  
} 
+0

记录'lat1','lon1','lat2'和'lon2'并查看它们的值是否正确。 – 2012-08-05 02:39:30

回答

4

看起来像一个小O型的情况下,应该不会是这个:

double lat1 = locs.get(i).getLatitude(); 
double lon1 = locs.get(i).getLongitude(); 
double lat2 = locs.get(i+1).getLatitude(); 
double lon2 = locs.get(i+1).getLongitude(); 

编辑:看起来像莫里森打我给它

+0

啊!哈哈。人物。谢谢!它的工作现在。 – bwoogie 2012-08-05 03:31:28

2

因此,你得到的是同一点之间的距离还是从一点到另一点的距离?

 double lat1 = locs.get(i).getLatitude(); 
     double lon1 = locs.get(i+1).getLongitude(); 
     double lat2 = locs.get(i).getLatitude(); 
     double lon2 = locs.get(i+1).getLongitude(); 
0

这个问题你方法是,这将会像乌鸦一样苍蝇,但是如果我从一个航点出发,转了一圈并沿着另一条街道走下去,我可能看起来像是在走2英里时走了100米。

因此,除非您需要足够数量的积分来处理道路曲线和人员进入不同道路的问题,否则与使用导航器查看距离时相比,您的号码会有很大不同。

正如其他人提到你的错字,我不会深入了解为什么距离为零的细节,但你可能想要考虑你的方法。

现在,如果用户正在步行或骑自行车,那么您的方法可能会很好,但对于驾驶,您可能需要测试很多并且看看您是否满意这种差异。

+0

我意识到这是乌鸦飞。这对我来说很好。 (至少现在)错别字是问题所在。 – bwoogie 2012-08-05 03:32:00