• Как определить входит ли геоточка(с широтой, долготой) в радиус?

    alex4
    @alex4
    интернет-предприниматель
    Есть маленькая, но всё-таки разница между «входит в радиус» и «входит в квадрат». Квадратное решение проще, для него вообще серьёзная ГИС-артиллерия не нужна, да и работает молниеносно.

    Делается это так:
    0. Предполагаю, что координаты точки в радианах у вас хранятся в базе данных, в полях lat и lng.
    1. Создаёте один индекс на оба поля для ускорения запросов.
    2. В коде переводите 10 км в радианы (кажется, в одном метре 0,1988 радиан, но проверьте).
    3. Чтобы определить, какие точки входят в квадрат со стороной 10 км с заданной точкой в центре, пишете такой запрос:

    SET @lat = 51.526613503445766; # дано в условии
    SET @lng = 46.02093849218558;
    SET @half= [10 км в радианах] / 2 ;
    
    
    SELECT id
    FROM points
    WHERE lat BETWEEN @lat - @half AND @lat + @half
      AND lng BETWEEN @lng - @half AND @lng + @half;
    


    Первые 3 строки (SET) надо убрать и вместо них в запросе использовать переменные из вашего языка сервера приложений (Питон, я так понимаю).

    Если нужно точное значение (земля ведь не ровный шар) или радиус, то см. решения других авторов.
    Ответ написан
    2 комментария