SQL: поиск ближайшего в 2d квадрате и круге - PullRequest
2 голосов
/ 25 сентября 2010

У меня есть таблица: points

она имеет 2 поля: X, Y

каждая строка представляет точку на 2d поле

Я хочу быть способным выполнятьпоиск точек с некоторым радиусом R, например

alt text

и квадрат со стороной A, например

alt text

Кстати: я используюPHP для доступа к моей БД.

Моя главная задача - получить ближайший к центру цифры пункт как первый результат в запросе, например alt text

Как сделать это в SQL?

Ответы [ 2 ]

3 голосов
/ 25 сентября 2010

Математически указать в круге уравнение статистики

(c.X-p.X)^2 + (c.Y-p.Y)^2 <= R^2

Где c - центр круга, p - точка, R - радиус

Для квадрата

max(abs(c.X-p.X),abs(c.Y-p.Y)) <= A/2

Где c - угол квадрата, p - точка, A - сторона квадрата

Вы можете просто написать эти уравнения на любом языке.

Левая часть уравнений называется расстояние для различных мер . Для нахождения ближайшей точки вы должны упорядочить набор результатов на расстояние по возрастанию и взять первый результат.

Примерно так:

select top 1 p.X, p.X from Points p
otrder by ((@x - p.X)*(@x - p.X)+(@y - p.Y)*(@y - p.Y))
2 голосов
/ 25 сентября 2010

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

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

Расстояние (g1, g2)

и другие полезные функции.

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