Как искать близлежащие места, учитывая пару широты, долготы, используя Google Maps API - PullRequest
1 голос
/ 01 ноября 2011

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

Таблица 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, но я могу изменить технологический стек, если любая другая комбинация будет быстрее. (предложить тоже)

Ответы [ 2 ]

1 голос
/ 20 мая 2014

Используйте следующий API. Это даст вам JSON, вы можете легко извлечь нужные данные.

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=48.859294,2.347589&radius=500&types=school&sensor=false&key=AIzaSyDN1QX-gWUR-mIYo_D21PNFLHHpNQkIkGU

0 голосов
/ 01 ноября 2011

Я бы сказал, делай как можно больше на стороне сервера. Я не уверен, почему вы думаете, что этот запрос «означает, что мой сервер будет обречен на все вычисления». Также я думаю, что вы могли бы сделать сортировку тоже; вам просто нужно добавить временный столбец к вашему запросу на основе фактического расстояния от пользователя. Я не знаю формулу, но я предполагаю, что это возможно в SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...