Процедура базы данных для местоположений - PullRequest
0 голосов
/ 08 июля 2010

Я пытаюсь сохранить базу данных местоположений GPS и выполнить запросы, которые находят точки в данном радиусе, а также самые близкие точки.Я использую mysql и смотрю на пространственные расширения.Я не уверен, вижу ли я, как на самом деле использовать пространственные расширения, чтобы делать то, что я ищу в запросах радиуса местоположения.

Итак, вот что я думаю о своих вариантах:

  1. Сохраните координаты широты и долготы в формате GPS в виде переменных с плавающей запятой в БД.Когда я получу координату GPS-точки и диапазон, вычислим значения max и min lat и long для запроса, а затем отсортируем их на основе функции расстояния в них.

  2. Используйтепространственное расширение.Я не совсем уверен, что это будет работать.Функция Distance () не реализована.Использование пространственного индекса требует нахождения ограничивающего прямоугольника (выполнимого) и вызова функции ограничивающего прямоугольника MBRContains для нахождения точек, находящихся в этом ограничивающем прямоугольнике.Однако точка имеет нулевую границу, поэтому функция MBRContains не работает с точками.

Я не уверен, что стандартный способ сделать это (кажется, что нет) и был бы очень признателен за любые слова опыта / мысли / помочь с решением.В настоящее время я использую mysql 5.13, и я почти уверен, что даже у 5.5 on нет метрики расстояния.

Также - даже если 2. работает, какой из них будет быстрее?Пожалуйста, дайте мне знать, что вы думаете, и особенно если вы уверены / видели что-то работает для быстрого и большого поиска!

Пространственный индекс Mysql: http://dev.mysql.com/doc/refman/5.5/en/using-a-spatial-index.html

Ответы [ 2 ]

1 голос
/ 08 июля 2010

Примерно так должно работать, чтобы получить расстояние между координатой и произвольной точкой, в данном примере это "начало координат".

SELECT 
place.name,
place.foo,
ROUND( SQRT(
   POW((69.1 * ({$origin->lat} - place.lat)), 2) 
 + POW((53.0 * ({$origin->lon} - place.lon)), 2)
), 1) AS distance
FROM place
ORDER BY distance ASC

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

0 голосов
/ 08 июля 2010

Насколько близко расположены координаты GPS? Если они относительно близки, так что искривление Земли не является проблемой, вы можете сначала попытаться выполнить запрос, используя линейное расстояние, чтобы посмотреть, как это работает. Однако это требует полного сканирования таблицы и может не дать точных результатов, если точки недостаточно сгруппированы. В этот момент вам нужно перейти к ограничительной рамке + большой расчет расстояния дуги.

...