路网数据总是按照一块一块的小面积数据来存储,每一块称为一个网格,一个网格的数据相对较小,在使用的时候,按网格为单位对路网数据进行读取。我们如何对整个路网数据进行分块,这里分为2个方向:
1,规整网格,即每个网格的面积大小都是一样的(考虑到纬度越大,距离越短,网格的面积是不一样,只是网格的经度差等于纬度差)。这时候,网格的查找非常方便,我们按照一定的规律对每个网格进行编号(基本上是网格左下角坐标点的纬度值得高bit位+经度值得高bit位+分层号,就能全球唯一确定一个网格了)。由于网格是规整的,网格号本身就能知道这个网格的具体包含的坐标范围,可以说查找的时间复杂度为O(1)。缺点就是,里面的road的疏密不一致,导致网格的数据size非常的不一致。规格网格还有个缺点就是,一条完整的link在跨网格的时候,在网格边界线上把link打断成2个link(这样做的目的是明确一条link属于唯一的一个网格),这无形中增加了link的格式,从而导致数据内容的增加。
2,不规则网格,即网格的面积大小不一致,这时候的网格可能重叠。这种划分主要是考虑到希望网格的数据size基本一致。路网是有疏密的,路网密集的地方,网格就划小一点,路网稀疏的地方网格就划大一点,主要是保证每个网格存储的数据内容大小一致。这样在读取的时候内存的使用会更高效。由于网格的不规则,我们在查找的实现必须通过过滤的方式完成工作。一般而言可以通过树的方式(kd树,R树等等)来查找。
当然,实际的使用过程中,我们可以调整我们的策略,采取混合的方法,一方面保留相应的优点,一方面规避对应的缺点。
。。。。。