在 PHP 中为输入值数组查找最接近的 lat/lng

Find closest lat/lng in PHP for an array of input values

我有代码,对于 lat/long 对数组,从另一个数组中找到最近的 lat/long 对:

输入:

$reference_array,这是一个关联数组,其中键是"labels",值是该标签的lat/long。例如,它可以将城镇名称与城镇的质心相匹配。

$input_array,这是 lat/long 对的列表。

我需要从 $reference_array 中找到最接近 $input_array 中每个点的标签。我还有一个最大半径,所以任何不在该半径内的最近点都被赋予 "nearest label" 为 null。

我有有效的代码 - 我遍历每个数组,计算每对之间的距离,然后记录 $input_array 中每个点的最近标签(及其距离)。这有效,并且与 this question 基本相同,但效率不高,而且我的脚本在相对较少的点上超时。我无法控制 $reference_array 的大小,所以总是需要进行大量比较。

我的问题 - 我可以使用哪些数据结构或算法来提高此计算的效率?

如果首先检查点是否包含在边长为2 * 半径的正方形中,可以提高效率。因为一个比较操作比计算距离的负载要小得多。