Вы можете хранить несколько упорядоченных списков индексов и координат, каждый из которых основан на x, y или z, либо на информации о долготе или широте.
Например:
Points = {(2,3), (6,4), (7,1), (1, 9)};
xList = {1, 2, 6, 7};
xIndexList = {3, 0, 1, 2};
yList = {1, 3, 4, 9};
yIndexList = {2, 0, 1, 3};
Затем вы можете отфильтровать x-значения в пределах 1 мили от x-координаты A и то же самое для y-значений и рассмотреть только перекрытие этих индексов.(Вы все равно должны сделать проверку расстояния для этих точек впоследствии.)
Хотя это немного громоздко, и при использовании сферических координат следует соблюдать осторожность вокруг полюсов и линий дат, но это, по крайней мере, быстро.