2013-04-19 3 views
3

У меня есть места в базе данных, которые я храню с их широтой и долготой.Сравнить lat/lng против другого lat/lng

У меня также есть зарегистрированные пользователи в широте и долготе.

Я разрабатываю функцию, которая позволит им находить места в любом измерении, скажем, 20 миль.

Возможно ли найти самый дальний лат и долго скажем в 20 милях от пользователя lat и long, а затем как-то написать запрос, чтобы найти места в пределах круга расстояний в MySQL?

Спасибо.

+1

Существует тысячи ответов на этот вопрос, если вы просто ищете: хорошие ключевые слова: «Haversine» или «Vincenty» –

+0

Если вы выполняете большое количество этих вычислений, вы можете использовать базу данных с пространственной поддержкой, такую ​​как PostGIS или MongoDB, который сделает эти расчеты для вас. –

+0

Я вижу ссылку @insertusernamehere, но это потребует от меня прокрутки каждого значения в базе данных? Я ищу способ рассчитать 20 миль от местоположения пользователя в lat и long, а затем искать в базе данных то, что находится внутри круга! – sark9012

ответ

1

я нашел рабочую функцию PHP:

function getDistanceBetweenPoints($latitude1, $longitude1, $latitude2, $longitude2, $unit = 'Mi') { 

    $theta = $longitude1 - $longitude2; 
    $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); 
    $distance = acos($distance); 
    $distance = rad2deg($distance); 
    $distance = $distance * 60 * 1.1515; switch($unit) { 
     case 'Mi': break; case 'Km' : $distance = $distance * 1.609344; 
    } 
    return (round($distance,2)); 

} 

Мысль это может помочь другим.

Смежные вопросы