Я работаю с большим набором точек, представленных парами широты/долготы (точки не обязательно уникальны, в наборе может быть несколько точек, находящихся в одном и том же месте). Точки хранятся в базе данных.
Что мне нужно сделать, так это выяснить способ эффективного выполнения поиска, чтобы получить количество точек, лежащих в пределах заданного радиуса (скажем, 25 миль) произвольной точки. Счет не должен быть на 100% точным - что более важно, он просто должен быть быстрым и разумно приближенным к правильному счету. Выполнение этого с помощью SQL возможно, используя запрос с некоторой тригонометрией в предложении WHERE для фильтрации точек по их расстоянию до контрольной точки. К сожалению, этот запрос очень, очень дорог, и кэширование вряд ли поможет вам, поскольку местоположения будут очень распространены.
В конечном итоге я собираюсь создать какую-то структуру памяти, которая сможет эффективно обрабатывать этот вид операции - избавляясь от некоторой точности и долговечности данных (возможно, перестраивая ее только один раз в день) в возвращение к скорости. Я занимаюсь некоторыми исследованиями на kd-деревьях, но пока неясно, насколько это можно применить к данным широты/долготы (в отличие от данных x, y в плоскости 2d).
Если у кого-нибудь есть какие-то идеи или решения, которые я должен изучить, я бы очень благодарен за это - так спасибо заранее.