2013-03-18 139 views
0

我想通过把它在onLocationChanged方法经常用它来计算我的当前位置和标记计算距离的Android

private double distance(double lat1, double lon1, double lat2, double lon2) { 
    double theta = lon1 - lon2; 
    double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); 
    dist = Math.acos(dist); 
    dist = rad2deg(dist); 
    dist = dist * 60 * 1.1515; 
    return (dist); 
} 

    private double deg2rad(double deg) { 
    return (deg * Math.PI/180.0); 
} 
private double rad2deg(double rad) { 
    return (rad * 180.0/Math.PI); 
} 

之间的距离,我将能够更新呢?我知道proximity将是一个更优雅的解决方案,但我遇到了问题,而且我的时间紧迫。

+1

的'Location'类已经把距离计算。 http://developer.android.com/reference/android/location/Location.html – 2013-03-18 09:40:12

+0

这是不是真的涉及到Android ... – RvdK 2013-03-18 09:44:17

回答

0

看看Calculate distance, bearing and more between Latitude/Longitude points

private double distance(double lat1, double lon1, double lat2, double lon2) { 
    int R = 6371; //km 
    double dLat = deg2rad(lat1 - lat2); 
    double dLon = deg2rad(lon1 - lon2); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    return c * R; 
} 
0

尝试使用此代码进行距离计算。

public double CalculationByDistance(GeoPoint StartP, GeoPoint EndP) { 
    double lat1 = StartP.getLatitudeE6()/1E6; 
    double lat2 = EndP.getLatitudeE6()/1E6; 
    double lon1 = StartP.getLongitudeE6()/1E6; 
    double lon2 = EndP.getLongitudeE6()/1E6; 
    double dLat = Math.toRadians(lat2-lat1); 
    double dLon = Math.toRadians(lon2-lon1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2); 
    double c = 2 * Math.asin(Math.sqrt(a)); 
    return Radius * c; 
}