我做过一次类似的事情(找到一个最大半径的点周围的所有纬度/经度对象)并使用此处给出的公式:
http ://www.movable-type.co.uk/scripts/latlong.html
但是,那是相当耗时的。所以我有点“装箱”了对象的拳头。基于上面的计算(当然恢复),我计算了那些坐标的纬度和经度,这些坐标的北、西、南和东正好具有最大距离。使用软管最大值和最小值(对于纬度和经度),我查询了所有有问题的对象。并且仅针对那些我计算了确切距离并将它们包含在结果列表中或排除它们的人。
但是,到目前为止,这并不完全符合您的问题。但我试图进一步加快计算。为此,我对自己说,我不需要从搜索对象到我的确切距离,但知道它是否比其中一个框坐标更近就足够了。那部分与您的问题非常吻合:
你的情况可能会容易得多。假设有问题的位置(最短的一次)靠近您尝试分配的一个位置,那么所有这些复杂的数学运算可能都不起作用。您不需要确切的距离。你需要的是最昂贵的。为此,我假设地球是平的,并且经度(或纬度)之间的距离是线性的。这当然不是真的,但应该足以弄清楚其中哪一个是最接近的。从那里你可以使用毕达哥拉斯。
Distance = sqrt(sqr(difference-in-lat) + sqr(difference-in-lon));
仅出于比较距离和找到最短距离的目的,您甚至可以用更快的平方操作代替耗时的平方路线。
Square-Of-Distance = sqr(difference-in-lat) + sqr(difference-in-lon).
然后比较各种Square-Of-Distance而不是Distance。结果将是相同的,但要快得多。
顺便说一句,那是一个 PHP 项目。这就是为什么我不能提供示例代码而只是解释算法的原因。