У меня есть простое требование: Отображение ближайших мест, отсортированных в порядке возрастания расстояния от текущего пользователя.
Таблица places
:
CREATE TABLE places (
id int(11) NOT NULL ,
category varchar(200) ,
name varchar(200) ,
address varchar(2000) ,
city varchar(100) ,
state varchar(100) ,
zipcode varchar(20) ,
country varchar(100) ,
latitude decimal(12,9) ,
longitude decimal(12,9) ,
phone varchar(200) ,
PRIMARY KEY (id)
)
Я прошу пользователя разрешить браузеру доступ к его местоположению (или найти appox. Местоположение с помощью ip). Имея его широту, долготу, адрес, город и страну, у меня есть 2 варианта, чтобы найти близлежащие места:
1) Рассчитайте минимальный, максимальный диапазон широты, долготы, скажем, в радиусе 5-10 миль от координат пользователя. Затем выполните:
SELECT * FROM places
WHERE (latitude between MINLAT and MAXLAT )
and (longitude between MINLNG and MAXLNG)
and category = CATEGORY
Это, вероятно, означает, что мой сервер будет обречен на все вычисления. Другая проблема заключается в том, что я не могу отсортировать результаты по фактическому расстоянию от пользователя.
2) Другой вариант - выбрать все места в том же городе, что и пользователь. Затем на стороне клиента вычислите расстояние между пользователем и каждым местом, используя функции javascript в Geo Api, и отобразите в порядке возрастания. Недостатком является то, что сервер должен отправлять все places
в городе клиенту (что может быть что-нибудь между .1k - 10k)
Какая лучшая альтернатива, учитывая все компромиссы? Есть ли другой вариант?
Планирую использовать LAMP, но я могу изменить технологический стек, если любая другая комбинация будет быстрее. (предложить тоже)