2015-11-24 142 views
0

我正在构建一个跟踪我的跑步和走路的应用程序,但我在计算总距离时遇到了一些麻烦。计算两个位置之间的距离Android Studio

这里是我的代码的一部分,我得到的纬度和经度的值,我在哪里做我的距离计算。

public class SportsActicity { 

protected Integer userId; 
protected ArrayList<Position> route = new ArrayList<Position>(); 

public SportsActicity() { 
    this.userId = 1; 
} 

public void track(Double latitude, Double longitude, Double altitude, float speed, long chron) { 
    Date currentDate = new Date(); 
    Position currentPosition = new Position(currentDate, latitude, longitude, altitude, speed, chron); 
    route.add(currentPosition); 
    // Float velocidade = (locat.getSpeed()*3600)/1000; 
} 

public double getTotalDistance() { 
    double distance = 0; 
    if(route.size() > 1) { 
     for (Integer i = 0; i < route.size() - 1; i++) { 
      distance += test(route.get(i).latitude, route.get(i).longitude, route.get(i + 1).latitude, route.get(i + 1).longitude); 
     } 
    } 
    return distance; 
} 

public Float test(Double lat1, Double lon1, Double lat2, Double lon2) { 
    double earthRadius = 6371; 
    double latDiff = Math.toRadians(lat2-lat1); 
    double lngDiff = Math.toRadians(lon2-lon1); 
    double a = Math.sin(latDiff /2) * Math.sin(latDiff /2) +   
       Math.cos(Math.toRadians(lat1))* 
       Math.cos(Math.toRadians(lat2))* Math.sin(lngDiff /2) * 
       Math.sin(lngDiff /2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    double distance = earthRadius * c; 

    int meterConversion = 1609; 

    return new Float(distance * meterConversion).floatValue(); 
} 

enter image description here

如果我不动,总距离始终递增,约10(不知道是否是米),和我得到的值显示不正确。

回答

0

您可以使用Location's静态方法distanceBetween而不是整个test方法。

int[] results = new int[1]; 
Location.distanceBetween(lat1, lon1, lat2, lon2, results); 
int distance = results[0]; 
+0

http://i.stack.imgur.com/ssjIY.png我做了什么ü说,但我仍然得到“愚蠢”手机站在窗口的数值。距离的值是0-8-11,坐标是你可以在图像中看到的3个。问候 –

0

从谷歌官方库link

SphericalUtil

MathUtil

使用

double distance = SphericalUtil.computeDistanceBetween(new LatLng(9.000,10.00), new LatLng(9.000,11.00)); 

上述方法将返回两个LatLng之间的距离,单位为米。 或者试试这个

private String getDistance(LatLng my_latlong,LatLng frnd_latlong){ 
Location l1=new Location("One"); 
l1.setLatitude(my_latlong.latitude); 
l1.setLongitude(my_latlong.longitude); 

Location l2=new Location("Two"); 
l2.setLatitude(frnd_latlong.latitude); 
l2.setLongitude(frnd_latlong.longitude); 

float distance=l1.distanceTo(l2); 
String dist=distance+" M"; 

    if(distance>1000.0f) 
    { 
    distance=distance/1000.0f; 
    dist=distance+" KM"; 
    } 

return dist; 

} 

,或者你可以给看看link

+0

谢谢。我只是忘了GPS有错误。我只是在开车的时候走了很远的距离,并且碰到了车的数值(100米错误)。 –

相关问题