http://www.movable -type.co.uk / scripts / latlong.html с точки зрения эффективности, единственное, что действительно приходит на ум, - это предварительное вычисление расстояния, когда записи вносятся в базу данных, у него есть другая таблица, в которой хранится пара местоположений вместе с расстоянием, для каждого местоположения, добавляемого в момент добавления, вы понесете затраты на вычисление расстояния до каждой другой точки в системе, но тогда поиск по этой таблице может быстро разрешать местоположения на определенном расстоянии.
Похоже, ответ Ааронастерлинга - это то, что я пытался продумать сам, но не знал, что существует :), так что, возможно, это лучшее решение, но я уверен, что во время поиска с этим алгоритмом у вас возникнут дополнительные затраты. (хотя, вероятно, небольшой, поскольку обход дерева, если он достаточно сбалансирован, обычно довольно быстрый процесс, мне потребуется некоторое время, чтобы понять, как именно дерево составлено, но для меня это новая концепция).