Расстояние по координатам PHP

D
На сайте с 28.06.2008
Offline
1104
226

Есть база объектов с координатами вида:

geo_lat:  60.036667
geo_long:  30.591039

Логику показа соседних объектов писал не я и хочу в ней разобраться.

есть запрос в базе

WHERE (t4.geo_long BETWEEN ".($geo_long - 0.01)." AND ".($geo_long + 0.01).") AND (t4.geo_lat BETWEEN ".($geo_lat - 0.01).
    " AND ".($geo_lat + 0.01).")

Вопрос 1:  0.01 это сколько метров в данном случае?

Далее я бы хотел выводить, сколько метров до этого объекта, нашел в сети функцию показа в метрах

    function locDistance($lat1, $lon1, $lat2, $lon2) {
        $theta = $lon1 - $lon2;
        $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist);
        $miles = $dist * 60 * 1.1515;
        return ($miles * 1.609344 * 1000);
    }

На фронте в итоге выводит непонятные числа вида

1637699.8395659968

Вопрос 2:  как все же посчитать расстояние в метрах имея координаты в таком виде как у меня?

W1
На сайте с 22.01.2021
Offline
303
#1
Dram :
0.01 это сколько метров

Это 1/100 градуса.
Градус меридиана везде одинаковый, равен 111 км.
Градус параллели зависит от широты, есть таблицы и приблизительные формулы для расчёта.

Мой форум - https://webinfo.guru –Там я всегда на связи
D
На сайте с 28.06.2008
Offline
1104
#2
Спасибо, с функцией тоже разобрался, считает верно, это я перепутал долготу и широту местами
W1
На сайте с 22.01.2021
Offline
303
#3
webinfo #:
Это 1/100 градуса

Исправил это, там не секунды, а дроби.

На самом деле, 0,01 - условная величина. Программист примерно оценил, какой размер прилегающей территории необходимо охватить, и задал одинаковую величину для всех территорий, так как это в данном случае некритично. Но это не окружность,  а прямоугольник.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий