Вычисление ограничивающей рамки широты/долготы с помощью формулы большого круга, радианы и градусы различаютсяPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Вычисление ограничивающей рамки широты/долготы с помощью формулы большого круга, радианы и градусы различаются

Сообщение Anonymous »


Я работаю над классом PHP для некоторых функций геолокации. Чтобы помочь с созданием SQL-запросов для поиска предприятий в базе данных, я написал функции get_bounding_box_rads и get_bounding_box_grades. Идея состоит в том, что вы указываете широту и долготу точки и указываете безразмерные значения (вы можете указать мили, километры или фарлонги и т. д.) для радиуса земного шара и диапазона для поиска. Эта функция вернет ограничивающую рамку с минимальной и максимальной широтой и долготой, которую вы можете использовать в эффективном запросе для получения записей из вашей базы данных. Эффективен в том смысле, что запрос имеет простые сравнения «больше/меньше», поэтому можно использовать индексы, а не какие-то безумные вычисления расстояний по большому кругу, которые приводят к неприятному сканированию таблицы.

Моя проблема заключается в том, что ограничивающая рамка возвращает разные долготы (любопытно, что широты до сих пор кажутся одинаковыми) для вычислений, выполненных в градусах, и вычислений, выполненных в радианах. Я думаю, что эта разница возникает при расчете расстояния по кругу, который я позаимствовал из этой статьи в Википедии, в которой говорится:

Формула, точная для всех расстояний, представляет собой следующий частный случай формулы Винсенти для эллипсоида с равными большой и малой осями:

Формула:
Изображение


Мой расчет (см. скрипт PHP ниже) возвращает разные значения долготы, в зависимости от того, выполняю ли я расчет в радианах или градусах:

радианы мин_широта 34.006625915236 max_lat 34.151356084764 мин_лон -118.35241157423 max_lon -118.17519642577

градусы мин_широта 34.006625915236 max_lat 34.151356084764 мин_лон -118.35117374123 max_lon -118.17643425877

Может ли кто-нибудь сказать мне причину разницы и как ее избежать? Если нет, то что точнее: градусы или радианы? Интересно, связано ли это с 32-битной или 64-битной ошибкой округления, или, возможно, я где-то допустил ошибку.

Вы сможете просто запустить следующий скрипт и понять, что я имею в виду
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»