Расчет расстояния между двумя точками. Значение изменяется только при изменении долготы

Я использую этот код для расчета расстояния между двумя точками. Я использую формулу Хаверсина

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;
    }

Полученное значение изменяется только при изменении долготы местоположения и остается неизменным при изменении широты. Есть ли причина, по которой мой код делает только это.


person Droid_Interceptor    schedule 09.02.2012    source источник


Ответы (2)


Эй, я не совсем уверен, но, просто взглянув на свой код, вы могли допустить ошибку, я этого не понимаю, но, возможно, вы могли бы изменить

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);

to

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);
person FabianCook    schedule 10.02.2012
comment
Спасибо, должно быть, просто проглядел это, когда кодировал его. - person Droid_Interceptor; 10.02.2012

Вам нужно изменить

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

to

Math.sin(dLat/2) * Math.sin(dLat/2)
person Dmitry Shkuropatsky    schedule 10.02.2012