Идея заключалась бы в том, чтобы иметь «сетку», которая разделяет координаты, поэтому, когда вам нужно выполнить поиск, вы можете безопасно вернуть все координаты в конкретной ячейке, не возвращать какие-либо из ячеек, находящихся слишком далеко от цели, иСравнение по координатам выполняется только для тех координат, которые находятся в ячейках, которые содержат некоторые координаты на расстоянии, а некоторые - на расстоянии.
Упрощенно до 1D:
Координаты от 1 до 100
Вы делите на 5 блоков по 20
Когда кто-то ищет все координаты на расстоянии 25из 47 вы возвращаете все координаты в блоках [30,39], [40,49], [50,59], [60,69], а затем после выполнения анализа по координатам для блоков [20,29] и [70,79] вы дополнительно возвращаете 22,23,24,25,26,27,28,29, 70,71,72.
К сожалению, у меня нет реалистичного способа оценить ускорение этого подхода, поэтому вам нужно будет реализоватьи сравните сами.