У меня есть база данных с широтой/долготой точек. Если я хочу выбрать все точки в определенном диапазоне с центром в определенной точке, он отлично работает, но если в этом центре есть какая-либо точка, он не будет выбран!
Я использую этот запрос:
SELECT *, ( 6371 * acos( cos( radians(-27.5796498) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-48.543221) ) + sin( radians(-27.5796498) ) * sin( radians( latitude ) ) ) ) AS distance FROM map HAVING distancia <= 2
В приведенном выше случае радиус равен "2", а центр карты находится в [-27.5796498, -27.5796498]. Этот запрос работает очень хорошо, но если какой-то пункт находится в этом очень точном центре, он не будет выбран. Почему?
EDIT: я обнаружил, что приведенная выше формула возвращает хорошее значение для всех точек. НО до точки, расположенной в центре MYSQL, возвращает значение NULL в столбец "расстояние"! Как профессионалы справляются с этим видом или проблемой использования SQL для выбора точек в пределах диапазона, включая центральную точку?
EDIT2: я мог бы создать еще один запрос, чтобы выбрать все точки, расположенные в самом центре радиуса, но это неэффективно, может быть, какой-то математический волшебник может придумать лучшую формулу.