Этот быстрый и грязный подход может сэкономить вам некоторое горе: разделите поверхность земли на 1 градус коробки. Затем у вас будет массив элементов размером 180x360, и вам нужно будет только найти небольшое количество ящиков, включая коробку, содержащую новую точку, и все ящики, расположенные непосредственно вокруг нее, для которых один из углов находится на заданном пользователем расстоянии. Вы обнаружите, что есть некоторые трюки, которые вы можете использовать, чтобы быстро определить, какие ящики использовать, не учитывая их всех. Просто не забывайте о широте и долготе.
Если ваши «единственные» имеют миллионы очков, и они не группируются в горячие точки, это может вас охватить.
Теоретически превосходный способ: вы можете сопоставить каждую точку в трехмерном пространстве, а затем сохранить их в octree, что позволит вам быстро найти близлежащие точки на произвольном расстоянии. Конечно, расстояние в трехмерном пространстве будет немного отличаться от расстояния большого круга на земном шаре, поэтому вам придется вычислить коэффициент преобразования. Это должно быть просто. Вы не упомянули язык реализации, но почти наверняка будет хорошо протестированная реализация octree для любого языка, на котором вы работаете. Если вы не возражаете, вставляя сторонний код, это решение является способом идти.
Это как раз был дан ответ несколько минут назад здесь: http://stackoverflow.com/questions/1847310/count-number-of-points-inside-a-circle-fast – hirschhornsalz
Помните, что long/lat странно, потому что расстояния изменение на основе широты. Если все данные находятся в пределах страны, это не имеет большого значения. Но я видел, как люди забывают об этом на глобальных наборах данных. – Nosredna
О, и не забывайте, что долгота обертывается, конечно. :-) – Nosredna