Как выбрать из таблицы PostgreSQL строки, которые входят в определенный радиус?

Доброго времени суток! Суть вопроса:

Есть таблица в PostgreSQL под названием shops со столбцами ID, name, latitude, longitude

Как выбрать из нее строки, которые входят в определенный диапазон?

Попытался воспользоваться следующим способом:

SELECT *
FROM shops
WHERE acos(
       sin(radians(31.852781))   -- Latitude текущий
         * sin(radians(latitude))   -- Latitude из таблицы
       + cos(radians(31.852781))   -- Latitude текущий
         * cos(radians(latitude))   -- Latitude из таблицы
         * cos( radians(49.151766)    -- Longitude текущий
           - radians(longitude))   -- Longitude из таблицы
       ) * 6371 <= 200;


для того чтобы выбрать все магазины в радиусе 200 км от заданных координат. Выходит ошибка:

[42883] ERROR: function radians(text) does not exist Подсказка: No function matches the given name and argument types. You might need to add explicit type casts.

Не могу разобраться в чем причина. Заранее благодарю.
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Избавиться от архаичных LON/LAT и перейти на нормальную геометрию.
https://postgis.net/docs/ST_Point.html
И искать объекты по человечески, а не синусами и косинусами.
https://postgis.net/docs/ST_DWithin.html

ПС. А то вашим следующим другом будет алгоритм поискать точек в 100 м от дороги.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы