Я немного читал об этом, но вряд ли есть какая-либо информация о том, как делать это с помощью точек и функции st_distance в mysql. Я полагаю, что это имеет смысл, так как в соответствии с http://bugs.mysql.com/bug.php?id=70494 это даже не было зарегистрировано до середины прошлого года. Почти каждое решение, которое я видел, вместо этого использует отдельные столбцы long и lat, а затем помещает их в формулу haversine следующим образом: расстояние сортировки в MySQL PHP Это кажется очень грязным способом сделать это из-за существования типов данных геометрии и пространственных функций.
Моя таблица до сих пор:
Имя пользователя — varchar
Местоположение — Точка (1 1) или что-то подобное
Я хочу выбрать одного пользователя, а затем отобразить около 10 или около того пользователей к ним. Можно ли сделать это полностью через SQL, используя точки и функцию st_distance, или мне придется внести некоторые изменения и использовать вместо этого формулу haversine?
Можно ли сделать это полностью через SQL, используя точки и функцию st_distance, или мне придется внести некоторые изменения и использовать вместо этого формулу haversine?
Как указано в Класс геометрии:
Geometry
является корневым классом иерархии. Это нереализуемый класс, но он имеет ряд свойств, описанных в следующем списке, которые являются общими для всех значений геометрии, созданных из любого из подклассов Geometry.[ deletia ]Все расчеты выполнены в предположении евклидовой (плоской) геометрии.
[ deletia ]Например, в разных системах координат расстояние между двумя объектами может отличаться, даже если объекты имеют одинаковые координаты, поскольку расстояние на плоскостной Система координат и расстояние на геоцентрический Система (координаты на поверхности Земли) это разные вещи.
Поэтому пространственные расширения MySQL (включая его ST_Distance()
функция) не могу быть использованы для расчета геодезические такие как расстояние большого круга, что вы после. При выводе вы должны будете использовать формулу, такую как Haversine вместо.
На сайте разработчиков Google есть хорошее руководство: Создание Локатора Магазина с PHP, MySQL & Карты Гугл.
Других решений пока нет …