2009-12-29 2 views
1

Я хочу, чтобы сделать поиск по координатам, то есть я хочу иметь функцию, которая работает следующим образом:поиск SQL с помощью гаверсинуса в Учении

function getLocationsInCircle($lat, $long, $minDist, $maxDist){ 
    //return all the places that are at least $minDist 
    //kilometers away and no more than $maxDist kilometers away 
} 

У меня есть «место» таблица, которая хранит все местоположения и идентификаторы их широту и долготу.

Формула гаверсинуса достаточно хороша для того, что я хочу сделать

6371 * ACOS(SIN(RADIANS($lat)) * SIN(RADIANS(latitude)) + COS(RADIANS($lat)) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS($long))) 

Я просто не вижу, как запустить этот запрос в доктрине.

ответ

3

Попробуйте это:

Doctrine_query::create()->select('id') 
    ->addSelect("(6371 * ACOS(SIN(RADIANS($latitude)) * SIN(RADIANS(l.latitude)) + COS(RADIANS($latitude)) * COS(RADIANS(l.latitude)) * COS(RADIANS(l.longitude) - RADIANS($longitude)))) as Distance") 
    ->from('Location l') 
    ->having("Distance > $minDist AND Distance < $maxDist"); 
Смежные вопросы