#postgresql
#postgresql
Вопрос:
Я пытаюсь запросить ближайшие места в postgres с помощью пользовательских широты, долготы и мест широта, долгота с формулой
SELECT * FROM place
WHERE acos(sin(0.90987) * sin(latitude)
cos(0.9098) * cos(latitude) * cos(0.3675-longitude)) * 6371
<= 100;
Но я получаю сообщение об ошибке:
Error: Input is out of range.
кто может помочь?
Ответ №1:
Предполагая, что координаты указаны в радианах, в конце есть опечатка ( -longitude
должно быть за пределами последнего cos
)
SELECT * FROM place
WHERE
acos(
sin(0.90987)
*sin(latitude)
cos(0.9098)
*cos(latitude)
*cos(0.3675)
-longitude)
*6371<=100
При этом, взгляните на Postgis, это значительно упрощает пространственные запросы
Select * FROM place where st_dwithin(place.geog, my_target_point, 100)