Радиус поиска в зависимости от размера области - PHP / API Карт Google - PullRequest
1 голос
/ 18 октября 2011

У меня есть поиск в базе данных SQL, который в настоящее время содержит поисковый запрос и ввод адреса - который геокодируется Google для широты / долготы.Прямо сейчас я упорядочиваю результаты сначала по релевантности поискового запроса, а затем по расстоянию на основе статического радиуса (7 миль).

Проблема, с которой я столкнулся, заключается в том, что при поиске рядом с "Джо Смитом"«Центральный парк», это может быть «Джо Смит» в Бронксе (в пределах 7 миль), который появляется как первый результат, вместо всех Джо и Смитов, которые на самом деле находятся в Центральном парке.Есть ли способ автоматически изменить этот в настоящее время статический радиус поиска в зависимости от того, насколько велика область поиска, чтобы она работала для Нью-Йорка или даже штата Нью-Йорк?Или есть лучшее решение этой проблемы?

Я думаю, что я пытаюсь подражать поиску на картах Google, чтобы я мог сначала найти самые релевантные поиски, но в реальной области, котораябыл обыскан.Буду очень признателен за любую помощь, или даже за некоторые другие подходы, которые я должен использовать.Спасибо!

1 Ответ

1 голос
/ 19 октября 2011

Предполагая, что у вас есть столбцы name, longitude и latitude, вы можете выполнить следующий запрос, чтобы получить результаты, упорядоченные по расстоянию:

// Long/Lat of the geocoded address (In your case: Central Park)
$latitude = 40.771133;
$longitude = -73.974187;

$sql = "
SELECT 
    name,
    ((ACOS(SIN( ".$latitude." * PI() / 180) * SIN(latitude * PI() / 180) + COS(".$latitude." * PI() / 180) * COS(latitude * PI() / 180) * COS((".$longitude." - longitude) * PI() / 180)) * 180 / PI()) * 60 * 1.1515) AS distance 

FROM 
    yourtable 

WHERE 1 
    AND name like 'John%'

HAVING distance <=7
ORDER BY distance ASC
LIMIT 10";
...