在 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 * 半径的正方形中,可以提高效率。因为一个比较操作比计算距离的负载要小得多。
我有代码,对于 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 * 半径的正方形中,可以提高效率。因为一个比较操作比计算距离的负载要小得多。