计算两个位置之间的距离。仅在更改经度时更改值

时间:2012-02-09 23:59:44

标签: android android-location

我使用此代码计算两点之间的距离。我正在使用Haversine公式

private double CalcDistance(Location Start, Location End) 
    {
        // TODO Auto-generated method stub
        double distance;
        double lat1 = Start.getLatitude();
        double lat2 = End.getLatitude();
        double lng1 = Start.getLongitude();
        double lng2 = End.getLongitude();
        double dLat = Math.abs(Math.toRadians(lat2-lat1));
        double dLng = Math.abs(Math.toRadians(lng2 - lng1));

        distance = Math.sin(dLat/2) * Math.sin(dLng/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
                Math.sin(dLng/2) * Math.sin(dLng/2);

        double c = 2 * Math.asin(Math.sqrt(distance));

        //Return the answer in Kilometre (6371km the mean radius of the earth)
        return c * 6371;
    }

生成的值只有在位置的经度发生变化时才会发生变化,如果纬度发生变化则保持不变。我的代码是否只有这样做。

2 个答案:

答案 0 :(得分:1)

您需要更改

Math.sin(dLat/2) * Math.sin(dLng/2)

Math.sin(dLat/2) * Math.sin(dLat/2)

答案 1 :(得分:1)

嘿,我不完全确定,但只是查看你的代码,你可能犯了错误,我不明白,但也许你可以改变

distance = Math.sin(dLat/2) * Math.sin(dLng/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
                Math.sin(dLng/2) * Math.sin(dLng/2);

distance = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
                Math.sin(dLng/2) * Math.sin(dLng/2);