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

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

До сих пор мой стол:

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

Местонахождение – Point (1 1) или что-то в этом роде

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

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

    Как описано в разделе « Геометрия» :

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

      [ удаление ] 

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

      [ удаление ] 

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

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

    На веб-сайте Google Developers есть хороший учебник: Создание локатора хранилища с помощью PHP, MySQL и Google Maps .