У меня есть белый список городов.Допустим, Сиэтл, Портленд, Салем.Используя GeoIP, я бы определил город пользователя.Давайте назовем это $ user_city .Основываясь на $ user_city, я хочу отобразить списки объявлений из ближайшего города из моего белого списка (Сиэтл || Портленд || Салем) с пробегом в 140 миль.Если город не указан в 140 милях, я бы просто показал раскрывающийся список и попросил бы пользователя вручную выбрать город.
Есть несколько способов сделать это:
- вычислить это на лету (я нашел алгоритм в одном из ответов SO)
- с помощью БД (позвольте мне объяснить):
создать таблицу под названием регионов
регионов будут иметь
город 1 |город 2 |расстояние (до 140 миль)город 1 = города из белого спискагород 2 = любой город в пределах 140 миль от города 1
Это создаст таблицу разумного размера.Если мой белый список содержит 200 городов, и в пределах 140 миль от каждого города есть 40 городов (или городов).Это создаст 8000 строк.
Now, when a user comes to my site:
1) I check if user is from whitelist city already (city 1 column). If so, display that city
2). If not, check if $user_city is in "city 2" column
2a) if it is, get whitelist city with lowest distance
2b) if it is not, display drop-down for manual input
Окончательное ограничение : какой бы метод мы ни выбрали, он должен работать изнутри iFrame.Я имею в виду, могу ли я создать эту страницу на моем mysite1.com и встроить эту страницу в someothersite2.com внутри iframe?Удастся ли ему получить user_city и найти ближайший город из белого списка?Я знаю, что существуют некоторые правила междоменных сценариев, поэтому я не уверен, сможет ли iFrame получить IP-адрес пользователя, передать его в GeoIP и разрешить его в $ user_city
Итак, мой вопрос:
Как лучше всего это сделать?Если много людей встраивают мою страницу в свою страницу (используя iframe), то мой сервер будет отбрасываться 10000 раз в секунду (желаемое за действительное, но давайте предположим, что это так).Я не знаю, сможет ли БД справиться с таким количеством ударов.Я не хочу платить за дополнительные серверы БД или веб-серверы.Я хочу минимизировать потребность в ресурсах с моей стороны.Итак, я не возражаю перенести часть работы в браузер пользователя с помощью JavaScript.
РЕДАКТИРОВАТЬ:
В некоторых ответах рекомендуется хранить lat, long и затем выполнятьматематикаПричина, по которой я предложил создать таблицу «регионов», заключается в том, что таким образом вся математика вычисляется заранее.Если у меня есть «белый список» городов, и если я предварительно вычислю все возможные города поблизости для каждого из белого города.Тогда мне не нужно каждый раз вычислять расстояние (например, используя алгоритм Haversine).
Возможно ли выгрузить все это в браузер пользователя с помощью хитроумного использования Java Script?Я не хочу перегружать свой сервер для бесплатного обслуживания.Это может заработать деньги, но я очень близок к банкротству и боюсь, что мой сервер выйдет из строя, прежде чем я заработаю достаточно денег, чтобы заплатить за обновления.
Итак, три ограничения этой проблемы: 1) должен работать изнутри iframe (я надеюсь, что это станет вирусным, и каждый блоггер захочет встроить мой сайт в iframe своей страницы. 2) должен быть очень быстрым 3) должен минимизировать нагрузку на мойсервер