Я бы не рекомендовал выводить расчеты расстояния в вашем выражении sql, хотя я признаю, что решение, представленное denil, является гениальным.
есть 3 недостатка: обслуживание кода, перегрузка сервера sql И (прежде всего) земля не симметрична (это похоже на старый помятый бейсбол, который переехал грузовик).это означает, что вы можете захотеть изменить код в будущем (есть несколько ОЧЕНЬ сложных алгоритмов - http://en.wikipedia.org/wiki/Geographical_distance).
, я рекомендую использовать отдельную функцию, которая вычисляет расстояние с помощью простого общего алгоритма (аналогично, если нет)идентичен denil's). Я отправляю этот код, который является чистым php (нет необходимости использовать googlemaps api):
<?php
function distanceGeoPoints ($lat1, $lng1, $lat2, $lng2) {
$earthRadius = 3958.75;
$dLat = deg2rad($lat2-$lat1);
$dLng = deg2rad($lng2-$lng1);
$a = sin($dLat/2) * sin($dLat/2) +
cos(deg2rad($lat1)) * cos(deg2rad($lat2)) *
sin($dLng/2) * sin($dLng/2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$dist = $earthRadius * $c;
// from miles
$meterConversion = 1609;
$geopointDistance = $dist * $meterConversion;
return $geopointDistance;
}
// YOUR CODE HERE
echo distanceGeoPoints(22,50,22.1,50.1);
?>
существует ряд бесплатных программ (попробуйте gps trackmaker), которые позволят вам проверитьдопустимая погрешность для вашей части земного шара (если вам нужна точность). для вышеуказанной пары широта / длинна ошибка находится в пределах +/- 0,1% (по данным местных топографов).
ВНИМАНИЕ: эта формуладает КАРТОГРАФИЧЕСКОЕ расстояние (расстояние на уровне моря), а не ТОПОГРАФИЧЕСКОЕ расстояние (не учитывает топографию).