Tamkovich.com: Телеком/VoIP блог
Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys
Как рассчитать расстояние между парой координат (широта долгота)
26 февраля, 2010 by Сергей Тамкович
Программирование, Разное PHPРаботая с картами, часто бывает необходимо рассчитать расстояние в километрах между парой координат. Для этого пригодится следующая функция:
function distance($lat1, $lng1, $lat2, $lng2) { $pi80 = M_PI / 180; $lat1 *= $pi80; $lng1 *= $pi80; $lat2 *= $pi80; $lng2 *= $pi80; $r = 6372.797; // mean radius of Earth in km $dlat = ($lat2 - $lat1) / 2; $dlng = ($lng2 - $lng1) / 2; $a = sin($dlat) * sin($dlat) + cos($lat1) * cos($lat2) * sin($dlng) * sin($dlng); $c = 2 * atan2(sqrt($a), sqrt(1 - $a)); return $r * $c; } |
Программирование, Разное PHP
Проверил работоспособность метода.
Считает на ура с необходимой мне погрешностью.
Спасибо.
PS. Погрешность с гугл-картами где-то на 0.1%-0.2% это порядка 5 км на 4000 км. (может гуголовцы еще неровности поверхности считают, но не суть).
PSS. Помните что у гугла первая координата идет $lng, потом $lat.
В методе автора наоборот (точно так как указывает координаты у себя яндекс).
Это расчёт по идеальной фигуре, коей земля не является (средний радиус). Что бы повысить точность, можно ввести поправку для радиуса для различных областей (экваториальной, тропических и т.д.).
Рад что предложенный метод помог Вам.
А что за M_PI?
Igor, Гугль подсказывает, что это константа — число Пи.