Я скачал список почтовых индексов Великобритании с http: // www. ordnancesurvey.co.uk/oswebsite/opendata/index.html и установил его в базу данных MSSQL 2005. Таблица состоит из почтового индекса, широты и долготы. Мне нужен эффективный метод, чтобы получить ближайший почтовый индекс на данный широту / долготу. Вычисление расстояния между двумя точками и выбор наименьшего значения будет означать циклический просмотр всех данных для каждого запроса. Есть около 1,7 миллиона записей. Спасибо.
Вы можете ускорить вычисления, сначала отфильтровав запрос с помощью "приближения к кругу" - т.е. вернуть все почтовые индексы внутри определенного радиуса delta
. Основной запрос должен выглядеть примерно так:
SELECT postcode, x, y FROM table WHERE ((x BETWEEN x - delta AND x + delta) AND (y BETWEEN y - delta AND y + delta))
И теперь количество оставшихся данных должно быть немного более управляемым.
Также, если вы разрабатываете что-то "критически важное", обязательно посмотрите на PostGIS. Возможно, они уже решили некоторые проблемы, с которыми вы можете столкнуться... ;)
.