2010-04-29 4 views
5

Я создал приложение в CakePHP, в котором перечислены компании. Есть около 2000 записей, а координаты широты и долготы для каждого бизнеса находятся в БД.
Теперь я пытаюсь решить функцию поиска.Найдите ближайшие места по данному адресу

Будет поле ввода, в котором пользователь может указать адрес улицы, город или почтовый индекс, а затем я хотел бы, чтобы он вернул 11 ближайших предприятий, найденных из базы данных.

Как бы я это сделал?

+1

* (related) * http://stackoverflow.com/questions/838344/algorithm-for-finding-nearby-points – Gordon

+0

(связанный) http://www.artfulsoftware.com/infotree/queries.php?&bw = 1680 # 109 –

ответ

2

Я использую Yahoo Geo Planet API для определения места, соответствующего поисковому запросу, введенному пользователем. Обычно это соответствует нескольким местам, поэтому вы должны представить их обратно пользователю, чтобы заставить их выбрать правильный. Затем, как только вы знаете правильное место, и это long long, который предоставляет API Yahoo, вы можете использовать haversine formula, чтобы получить самые близкие компании к местоположению пользователей. В ответе this question есть хороший пример.

+0

Это действительно полезно и ближе к тому, что я ищу, спасибо! – xtine

0

Я бы приблизился к этому, создав квадрат вокруг точки, чтобы понять, что все в самоисцелении, поскольку вам понадобится база данных почтовых индексов или api, которые, как правило, стоят денег. Либо в покупке базы данных, либо в поиске.

Выполняя это по городу или, по крайней мере, по крайней мере, вы, возможно, не уверены, верните длинный лат из GMaps для этого города.

Тогда я попытался бы получить 4 угловых длинноволновых меча вокруг этой точки. Затем я мог искать базу данных для значений, которые находятся между ними.

В любом случае это сложная вещь, я бы сказал, потрясающий вопрос! Заинтересованы в том, чтобы увидеть предложения людей.

+0

данные переписи США могут использоваться для генерации взвешенных по массе долгосрочных данных по базам данных Zip. Я использовал эти данные в прошлом. Если вы заходите в Google, вы найдете бесплатную базу данных long-lat и zip-кода. И затем найти все почтовые индексы, которые находятся внутри квадрата рядом с тем, о котором идет речь, довольно быстро и легко получить очень хорошую близость. –

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