Я пытаюсь запросить базу данных MySQL (версия 5.7.15), чтобы получить все местоположения, расположенные в пределах 300 метров от некоторых координат (40.7542, -73.9961 в моем случае):Расстояние в метрах между двумя промежуточными точками в запросе MySQL
SELECT *
FROM location
WHERE st_distance_sphere(latlng, POINT(40.7542, -73.9961)) <= 300
ST_Distance_Sphere (g1, g2 [радиус])
Возвращает Mimimum сферическое расстояние между двумя точками и/или многоточечных точек на сфере, в метрах или NULL, если любой аргумент геометрии является NULL или пустым.
К сожалению, запрос возвращает также точки, которые находятся более чем в 300 метрах от POINT (40.7542, -73.9961), такие как:
- POINT (40.7501, -73,9949) (~ 470 метров в режиме реального жизнь)
- POINT (40,7498, -73,9937) (~ 530 метров в реальной жизни)
точка должна быть установлена таким образом, 'ТОЧКА (LNG, лат)' 'выберите st_distance_sphere (POINT (-73.9949,40.7501), POINT (-73,9961 , 40.7542)) ' дайте нам 466.9696023582369 - как и ожидалось –
@MituhaSergey, но почему запрос возвращает расстояния более 300? – grim
, потому что вы используете неправильную POINT. , например, 'выберите st_distance_sphere (POINT (40.7501, -73,9949), POINT (40,7542, -73,9961))' возвратит 183.3146597410617 <= 300. просто использовать правильный Args координаты точки (LNG, лат), LNG, как первый arg, lat - второй –