Sorting 二维近似数据的二元搜索算法

Sorting 二维近似数据的二元搜索算法,sorting,binary,spatial,binary-search,Sorting,Binary,Spatial,Binary Search,这是我的具体问题。我需要写一个算法: 1) 采用以下两种阵列: a) 大约3000个邮政编码(如果您在美国,则为邮政编码)的数组,其中包含所覆盖区域中心点的经度和纬度(即,每个数组元素3个数字) b) 由大约120000个位置组成的阵列,包括经度和纬度 2) 将每个位置转换为中心点最接近给定经度和纬度的邮政编码 请注意,这些位置的经度和纬度不太可能与邮政编码数组中的经度和纬度精确匹配。这就是为什么我要寻找到邮政编码覆盖区域中心点的最短距离 我知道如何计算两个经纬度对之间的距离。我也明白,最靠近邮

这是我的具体问题。我需要写一个算法:

1) 采用以下两种阵列:

a) 大约3000个邮政编码(如果您在美国,则为邮政编码)的数组,其中包含所覆盖区域中心点的经度和纬度(即,每个数组元素3个数字)

b) 由大约120000个位置组成的阵列,包括经度和纬度

2) 将每个位置转换为中心点最接近给定经度和纬度的邮政编码

请注意,这些位置的经度和纬度不太可能与邮政编码数组中的经度和纬度精确匹配。这就是为什么我要寻找到邮政编码覆盖区域中心点的最短距离

我知道如何计算两个经纬度对之间的距离。我也明白,最靠近邮政编码所覆盖区域的中心点并不一定意味着你在该邮政编码所覆盖的区域内-如果你在一个非常大的邮政编码区域,但靠近边界,你可能更接近邻近邮政编码区域的中心点。然而,在这种情况下,我不必考虑到这一点-到中心点的最短距离就足够了

解决此问题的一个非常简单的方法是访问120000个位置中的每一个,并通过计算到3000个邮政编码中心点中的每一个的距离,找到具有最近中心点的邮政编码。这意味着3000 x 120000=360000000的距离计算

如果邮政编码和位置在一维空间中(即,由1个数字而不是2个数字标识),我可以简单地按其一维中心点对邮政编码数组进行排序,然后在邮政编码数组中对每个位置进行二进制搜索

所以我想我要寻找的是一种对邮政编码中心点的经纬度二维空间进行排序的方法,这样我就可以对每个位置执行二维二进制搜索。我已经看到了解决这个问题的方法,但这些方法只适用于直接匹配,而我正在寻找离给定位置最近的中心点

我正在考虑缓存解决方案,但如果有一个快速的二维二进制搜索,我可以使用,这将使解决方案更简单


这将是批处理程序的一部分,所以我不计算毫秒数,但也不需要几天。它将每月运行一次,无需手动干预。

您可以使用空间填充曲线和四元键,而不是四叉树或空间索引。有一些非常有趣的sfc,如hilbert曲线和moore曲线,具有非常有趣的模式。

查找四叉树: