Попытка запросить ближайшие места в postgres с помощью пользовательских широты, долготы и мест широта, долгота

#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)