Вычисление, с наилучшей производительностью, расстояния между двумя точками широты и длины, с учетом короткого расстояния (максимум 10 км) - PullRequest
0 голосов
/ 14 января 2019

Учитывая две точки широты и долготы, которые я знаю, что расстояние между ними составляет максимум 10 км, нужно ли мне использовать формулу haversine для расчета расстояния между точками, или есть более простой способ (предположим, что земля плоская), который получит мне почти такой же результат, но в лучшем исполнении?

1 Ответ

0 голосов
/ 14 января 2019

Вы просто "рассчитываете" расстояние нескольких предметов? Или вы "ищете все в пределах 10 км? Есть огромная разница.

Последнее действительно является проблемой алгоритма того, как включить двумерную задачу в механизм 1D индексации.

План A: Нет соответствующего индекса - необходимо проверить все строки.

План B: INDEX(lat), INDEX(lng) и использовать «ограничивающий прямоугольник»: WHERE lat BETWEEN... AND lng BETWEEN... - оптимизатор выберет тот или иной индекс.

План C: Если у вас есть миллионы строк, скажите так; есть более быстрый (но более сложный сложный ) способ.

Я не ответил на ваш вопрос, потому что это наименее важная часть алгоритма. Но я сейчас отвечу.

Хаверсин занимает примерно вдвое больше, чем плоская земля плюс Пифагор. Но это только для вычислений; выборка строк гораздо важнее при обработке .

Haversine не требуется для такого небольшого расстояния. Я думаю, что это даже работает «правильно» при пересечении линии даты или полюса. Я подозреваю, что у плоской земли есть проблемы в этих крайних случаях.

Для плоской земли обязательно делите разницу долготы на COS(RADIANS(deg)). (1 градус долготы в Хельсинки (на 60 градусах широты) вдвое меньше, чем на экваторе.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...