2015-05-07 5 views
1

Я создаю своего рода ebay как веб-сайт только с сервисами. Все предоставленные услуги поставляются с координатами google maps lat/lang. В нем должна быть функциональность, чтобы найти все службы в радиусе 10 миль от местоположения текущего пользователя.Поиск местоположений с ближайшими координатами на картах google (из набора данных) относительно местоположения текущего пользователя

Что я имею на этой странице - это массив всех служб в местах расположения веб-сайта (lat/lang) и , необходимо получить текущее местоположение пользователя и найти все службы, чьи координаты lat/lang помещают их в 10 мильный радиус местоположения пользователя.

Пример: В Нью-Йорке есть 3 парикмахера. Пользователь, находящийся на окраине города, входит на веб-сайт и хочет найти парикмахера. Только один из 3 находится в радиусе 10 миль от местоположения пользователя и только тот, который появляется.

Уточнение: Идея заключается не в поиске всех видов поставщиков услуг из базы данных Google Maps, а в поиске только в координатах, которые я предоставил на своей странице. Также на странице нет фактической карты, это больше похоже на классическую страницу поиска - пользователь нажимает «найти службы рядом со мной» и после того, как карты Google сообщили мне, какие из них находятся поблизости, я показываю их только как текст.

Если что-то в моем вопросе неясно, сообщите мне об этом, и я исправлю его как можно быстрее.

ответ

1

Я сделал что-то подобное, но в больших масштабах подумал, что это не самая эффективная, возможно, это даст вам представление или лучшее представление о том, что делать.

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

+1

Чтобы быть честным, я думал о чем-то подобном, но сначала попытался убедиться, что нет какой-либо легкой готовой к использованию функции google maps api, которая вводит только 2 набора координат и вычисляет их расстояние. Спасибо за отличную формулу расстояния круга, поскольку это немного ускорило мои исследования. – Decorayah

+0

рад, что я мог бы помочь! – mekk33

0

Это можно сделать, используя GeoHash и структуру данных trie. Redis имеет встроенную функцию для достижения этих пространственных запросов с радиусом.

Каждая координата, где вы хотите найти, может храниться как geohash в trie. Затем, основываясь на поиске lat/long, вычислите его GeoHash и начните идти 3-4 уровня в глубину в три (или как упоминание расстояния). Затем отобразите все узлы ниже этого узла trie.

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