@l4m3r

Order by distance. Как?

Есть большая таблица x, y, z координат.
Можно ли как-то одним запросом получить отсортировать по расстоянию по определённой точки (скажем [50, 50, 50]).
Или может по-другому спроектировать таблицу?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Делаете вычисляемую колонку и сортирует по ней. Формулу можно нагуглить для для небольших расстояний. Для больших - не просто
Ответ написан
gromdron
@gromdron
Работаю с Bitrix24
Если вы не хотите заниматься достаточно сложным математическим расчетом, то проще будет завести отдельную таблицу с расстояниями: от, до и расстояние и уже по ней делать пересчет. Ну и соответственно каждый раз обновлять.

На обновлениях конечно потеряете, зато select будет очень быстрым.
Ответ написан
TheRonCronix
@TheRonCronix
Посчитать можно, для этого придется пройтись по всем строкам таблицы и для каждой из точек высчитать расстояние до вашей точки, а потом отсортировать. Но, если нужно выбрать лишь несколько ближайших точек или просто точки не слишком удаленные от заданной, то можно воспользоваться техникой bounding-box: представить, что вокруг точки куб или квадрат заданного размера и провести вычисление сначала в границах куба. Это позволит хоть как-то задействовать индексы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы