@burov0798
Пытаюсь изучать php\js

Выборка по координатам в Postgres по удаленности?

Есть таблица с пользователями, у каждого есть поле latitude и longitude с координатами. Задача такова, что некий пользователь хочет получить список (например из 10 человек), которые наиболее ближе к нему.

Есть ли в Postgres стандартные механизмы, чтобы в запросе я мог указать координаты точки, и Postgres мне выдал список пользователей по удаленности от этой точки? Или же нужно выгружать всех, и силами Python уже обрабатывать все эти координаты, искать ближащие и сортировать?
  • Вопрос задан
  • 215 просмотров
Решения вопроса 1
Alexeytur
@Alexeytur
SELECT user2.*,
SQRT(POW(69.1 * (user1.latitude::float -  user2.latitude::float), 2) + 
    POW(69.1 * (user2.longtitude::float - user1.longitude::float) * COS(user1.latitude::float / 57.3), 2)
) distanse
FROM users user1, users user2
WHERE user1.user_id=@p_user_id
ORDER BY distanse
LIMIT 10

UPD можно сократить запрос до одной таблицы:

SELECT users.*,
SQRT(POW(69.1 * (@p_user_latitude::float - users.latitude::float), 2) + 
    POW(69.1 * (users.longtitude::float - @p_user_longitude::float) * COS(@p_user_latitude::float / 57.3), 2)
) distanse
FROM users 
ORDER BY distanse
LIMIT 10
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@GoldGoblin
Нужно смотреть в сторону postGis. Голая постргрес так не умеет
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы