如何检查两个纬度和经度坐标之间的距离?

时间:2013-03-27 12:40:09

标签: java android android-location

我正在使用此代码段获取用户当前最佳位置:

    LocationManager ltrLocationer = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    Location locLocation = ltrLocationer.getLastKnownLocation(ltrLocationer.getBestProvider(criteria, true));

我有两个Double个对象,分别包含纬度和经度。我想检查当前坐标和上述值之间的距离(以米为单位)。我怎么能这样做?

这听起来很简单,但是我找不到一个例子来说明这一点。感谢。

3 个答案:

答案 0 :(得分:2)

Location对象有一个distance方法。使用它,它为你做数学。如果您的坐标为douboles,请使用静态函数Location.distanceBetween

答案 1 :(得分:1)

看看这里:GPS Coordinates to Meters 这里还有一篇关于用于计算的公式的维基百科文章:Haversine formula

答案 2 :(得分:0)

检查此方法,这将为您提供distance in a straight line

public static double distFrom(double lat1, double lng1, double lat2, double lng2) {
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double sindLat = Math.sin(dLat / 2);
double sindLng = Math.sin(dLng / 2);
double a = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)
        * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;

return dist;
}

如果您想要road distance此操作稍微困难一点,并且需要拨打Google Direction API服务。