Элегантный способ поиска элементов в прямоугольнике широты / долготы в базе данных MySQL? - PullRequest
0 голосов
/ 02 января 2011

У меня есть база данных MySQL, где каждая запись содержит, а также многое другое, широту и долготу.На данный момент они имеют тип TEXT, хотя я был бы рад изменить это при необходимости.Одна переменная для широты и долготы, т.е.

latitude:  51.258215
longitude: -0.123456

Итак, я хотел бы знать, что это самый быстрый и элегантный способ получения списка записей, когда скрипт php получает четыре переменные POST-орды, представляющие верхний левый и нижний правый углы прямоугольника на карте ..?Есть ли способы действительно оптимизировать скорость для этого?

Ответы [ 2 ]

4 голосов
/ 02 января 2011

MySQL имеет несколько базовых пространственных расширений (см. пространственные расширения ). Это позволяет хранить точки широты / долготы в виде записей точек, например:

INSERT INTO store_locations (id, name, location) 
VALUES (1, 'some name', POINT(51.258215, -0.123456));

Затем вы можете запускать пространственные запросы, например, с помощью операций минимальный ограничивающий прямоугольник :

SELECT * FROM store_locations WHERE MBRWITHIN(location, MULTIPOINT($top $left, $bottom $right))

(где сверху, слева, снизу и справа - соответствующие координаты).

1 голос
/ 02 января 2011

Разделите широту и долготу на два разных поля / столбца.Индексируйте их обоих и выполняйте запрос диапазона (предложение BETWEEN или <= AND> = type), который должен довольно быстро получить результаты.

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