Google Maps, геолокации, JQuery, PHP: найти почтовые индексы в пределах 30 миль - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть CSV-файл с именами, почтовыми индексами и расстояниями, готовыми путешествовать. Веб-пользователь будет вводить свой почтовый индекс и радиус мили, по которому он хочет искать. И я ищу имена людей в файле CSV, которые соответствуют этому поиску. Я не слишком знаком с поиском геолокации или бесплатными технологиями, которые в настоящее время доступны (например, карты Google). Сайт запрограммирован на php и использует jquery. Я не хочу карту, просто массив или дерево имен. Любые предложения о том, как это настроить?

Пример CSV

"1","John Smith","ZipCode-12345","TravelDistance-30"

Решение

  1. Установка cronjob для захвата csv-файла и выгрузки в таблицу mysql db
  2. Скачано дБ таблицы городов / штатов, широта / долгота, почтовые индексы
  3. Использовал формулу sql для расчета расстояний и запроса совпадений
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) )

* cos (радианы (lng) - радианы (-122)) + sin (радианы (37)) * sin (радианы ( широта)))) как расстояние от маркеров Иметь расстояние <25 ЗАКАЗАТЬ НА расстояние LIMIT 0, 20; </p>

1 Ответ

3 голосов
/ 04 апреля 2011

В основном, в таком случае, как этот, я бы использовал базу данных и две таблицы:

  • Одна таблица для cities (или почтовые индексы - не уверены, соответствуют ли они городам) ; в этой таблице вы получите:
    • ID
    • название города
    • широта
    • долгота
  • Один стол для users
    • ID
    • имя пользователя
    • zipcode_id: внешний ключ к строке другой таблицы - город, в котором живет пользователь


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

Чтобы определить, какие города ближе к данному, я полагаю, вы можете найти некоторую формулу - например, см. Следующие вопросы / ответы:


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

(Другое решение - отправлять запросы в службу геокодирования карт Google - но это не допускается условиями их обслуживания, если я правильно помню)

...