2015-07-29 3 views
1

Я пытаюсь найти на теоретической основе, как найти ближайшие точки к одной точке. Все эти точки (75 000+ точек) отображаются с широтой и долготой. Формула Хаверсина для расстояния - это то, что я использую, чтобы найти расстояние между двумя точками, но действительно ли эта формульная шкала на лету?Рассчитать расстояние ближайшей точки с использованием широты/долготы в массе?

Я использую веб-интерфейс + сервер SQL Server. Я даже не могу себе представить, как это сделать ... найти все расстояния «на лету», а затем отсортировать их по дистанции? Опять же, мне интересно, насколько это масштабируется до такого количества очков, как у меня.

ответ

1

This article идет в подробности об этом точном предмете.

Основная оптимизация использует индекс на lat/long. Если вы знаете, что на некотором расстоянии от вашего запроса должна быть точка, вы можете использовать это известное расстояние только для проверки точек внутри этого поля. Из-за индекса база данных выполняет сканирование диапазона.

+0

Вау, я не могу поверить, что такая статья ниши существует. Отличная ссылка. Не понимал, что индексирование является ключевым. – user111222333

+1

Я не думаю, что это действительно ниша - подумайте обо всех мобильных приложениях, которые используют ваше текущее местоположение, чтобы найти вещи. (Кроме того, га, «индексирование является ключевым». :)) – 31eee384

1

Я предполагаю, что у вас есть lat и long в базе данных SQL.

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

SELECT (формула гаверсинуса) как расстояние из Таблицы ORDER BY расстояние ASC

+0

Да, все lat/long находятся в базе данных. Я еще не реализовал решение, но я думаю, что формула Хаверсина X 75000 будет длинным запросом, поэтому моя проблема. Это выглядит довольно математично. Ваше мнение? – user111222333

+1

Формула Хаверсина не слишком тяжелая. Большинство компьютеров используют таблицы поиска для вычисления синуса и косинуса, поэтому это довольно быстрый расчет. 75000 строк действительно не так много. Даже при 128 байтах в строке (много для двух чисел) это всего лишь 10 МБ данных. Это займет всего несколько секунд, может быть, минута или две. –

Смежные вопросы