поиск по координатам - PullRequest
       39

поиск по координатам

1 голос
/ 23 февраля 2011

Я разрабатываю веб-страницу, где пользователи могут создавать действия, а другие находят их с помощью функции поиска. Когда вы создаете действие, вы должны указать точное местоположение, где оно будет происходить, при помощи карт Google я получаю широту и долготу. Теперь, когда я выполняю поиск, я хочу иметь возможность находить все действия рядом с указанным местоположением (также с помощью карт Google).

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

У меня в голове возникает мысль, что это можно решить, вычисляя максимальную / минимальную широту и долготу, и использую их в качестве параметров в sql-запросе, где я использую предложение where для фильтрации ... Проблема I ' м лицом здесь, во-первых, рассчитывает эти максимальные / минимальные значения, во-вторых, в круглой области (с радиусом 5 км), а не прямоугольной

Буду признателен за любой вклад здесь! Спасибо!)

Ответы [ 3 ]

2 голосов
/ 23 февраля 2011

Координаты, которые вы получаете, вероятно, не x и y, а широта и долгота; вам понадобится сферическое расстояние , если все ваши точки не находятся в пределах довольно небольшого радиуса, например несколько сотен миль.

Если у вас много точек, прямой исчерпывающий поиск становится слишком медленным, сферическим или нет. К счастью, расширения ГИС доступны как для MySQL , так и для Postgres . Коммерческие БД также имеют пространственные расширения. Это делает поиск близлежащих объектов эффективным.

1 голос
/ 01 марта 2011

Надеюсь, что это поможет вам.

Получить ближайшие места на Google Картах, используя пространственные данные MySQL

Однако это запрос MySQl.Вы можете конвертировать его как ваше требование.

1 голос
/ 23 февраля 2011
  • Рассчитайте границу широты и долготы.
  • Выберите все, где широта находится между вашими двумя значениями для этого, и аналогично для долготы. Если вы не используете пространственный индекс, остерегайтесь краевых падежей на вашей сфере (превосходное каламбур!): Пересечение 0, 90 или 180 градусов может привести к невозможным критериям.
  • Либо на своем сервере SQL, либо в своем приложении выполните формулу Хаверсайна в соответствии с вашими результатами. Вы должны иметь прямоугольные ограничивающие значения, чтобы предотвратить сканирование таблицы, но результаты в прямоугольнике будут включать результаты за пределами вашего круга.

Если вы на самом деле перестанете думать об этом, ваш прямоугольник и ваш круг деформируются ... но это в любом случае не имеет значения.

Кроме того, ознакомьтесь с этим, который расширит измерение расстояния и упомянет некоторые другие идеи: http://www.movable -type.co.uk / scripts / gis-faq-5.1.html

...