Сортировка пользователей по расстоянию в MySQL с использованием st_distance

Я немного читал об этом, но вряд ли есть какая-либо информация о том, как делать это с помощью точек и функции st_distance в mysql. Я полагаю, что это имеет смысл, так как в соответствии с http://bugs.mysql.com/bug.php?id=70494 это даже не было зарегистрировано до середины прошлого года. Почти каждое решение, которое я видел, вместо этого использует отдельные столбцы long и lat, а затем помещает их в формулу haversine следующим образом: расстояние сортировки в MySQL PHP Это кажется очень грязным способом сделать это из-за существования типов данных геометрии и пространственных функций.

Моя таблица до сих пор:

Имя пользователя — varchar

Местоположение — Точка (1 1) или что-то подобное

Я хочу выбрать одного пользователя, а затем отобразить около 10 или около того пользователей к ним. Можно ли сделать это полностью через SQL, используя точки и функцию st_distance, или мне придется внести некоторые изменения и использовать вместо этого формулу haversine?

2

Решение

Можно ли сделать это полностью через SQL, используя точки и функцию st_distance, или мне придется внести некоторые изменения и использовать вместо этого формулу haversine?

Как указано в Класс геометрии:

Geometry является корневым классом иерархии. Это нереализуемый класс, но он имеет ряд свойств, описанных в следующем списке, которые являются общими для всех значений геометрии, созданных из любого из подклассов Geometry.

[ deletia ]

Все расчеты выполнены в предположении евклидовой (плоской) геометрии.

[ deletia ]

Например, в разных системах координат расстояние между двумя объектами может отличаться, даже если объекты имеют одинаковые координаты, поскольку расстояние на плоскостной Система координат и расстояние на геоцентрический Система (координаты на поверхности Земли) это разные вещи.

Поэтому пространственные расширения MySQL (включая его ST_Distance() функция) не могу быть использованы для расчета геодезические такие как расстояние большого круга, что вы после. При выводе вы должны будете использовать формулу, такую ​​как Haversine вместо.

На сайте разработчиков Google есть хорошее руководство: Создание Локатора Магазина с PHP, MySQL & Карты Гугл.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]