Я немного почитал об этом, но вряд ли есть информация об этом, используя точки и функцию 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 .