Возможно, вы сможете использовать что-то вроде подхода на этом веб-сайте , чтобы ограничить количество точек, которые фактически требуют, чтобы вы вычислили расстояние.
На веб-сайте показано, как вычислить координаты широты и долготы для точки и заданного расстояния. Это не совсем та же проблема, что у вас есть, но она может служить фильтром. В вашем случае вы, очевидно, пытаетесь найти 10 (или n) ближайших точек к данной точке. Вы можете применить следующий алгоритм, чтобы найти 10 (или n) ближайших точек:
Для первых n очков вы могли бы пройти полномасштабное расстояние
расчет, который вы имеете, сохраняя расстояние вдоль каждой точки.
Сохранить общее наибольшее расстояние. Вычислить широту, долготу
коробка, как показано на сайте выше.
Продолжайте до конца ваших пунктов.
Если какая-либо точка находится за пределами прямоугольной рамки, она не может быть
ближе, чем любая из текущих 10 ближайших точек. Если это внутри
ограничивающий прямоугольник, рассчитать расстояние.
Откажитесь от самого дальнего из предыдущего набора из 10 «ближайших» точек.
Пересчитать ограничивающий прямоугольник lat, lon, основываясь на новой самой дальней точке.
Повторяйте, пока не обработаны все точки.
Преимущество этого подхода заключается в том, что вы можете избежать тяжелых вычислений для большого количества ваших очков. В зависимости от распределения ваших очков, вы все равно можете страдать от низкой производительности, например, если точки оказываются упорядоченными таким образом, что они находятся на уменьшающемся расстоянии от ваших целевых точек (точка [0] - самая дальняя, а точка [N]). ближайший)).