具体实施方式
贯穿以下描述,相同参考数字将用以识别相同部分。贯穿对各个实施例的描述,对参考标号处于19xx系列中的图22的流程图进行了参考。
图1示意性地展示全球定位***(GPS),全球定位***(GPS)为基于卫星-无线电的导航***,其可用以确定无限数目个用户的连续位置、速度、时间,及(在一些情况下)方向信息。过去被称为NAVSTAR的GPS并入有在极其精确的轨道中绕地球运转的多个卫星。基于这些精确轨道,GPS卫星可将其所在地作为GPS数据中继到任何数目个接收单元。然而,将理解,可使用例如GLOSNASS、欧洲伽利略(Galileo)定位***、COMPASS定位***或IRNSS(印度区域导航卫星***)等全球定位***。
当经专门配备以接收GPS数据的装置开始扫描无线电频率以寻找GPS卫星信号时,实施GPS***。在从GPS卫星接收到无线电信号后,所述装置即刻经由多种不同常规方法中的一者来确定所述卫星的精确所在地。在多数情况下,所述装置将继续扫描以寻找信号,直到其已获得至少三个不同的卫星信号(注意,可使用其它三角测量技术通过仅两个信号来确定位置,虽然这并非常例)。在实施几何三角测量的情况下,接收器利用三个已知的位置来确定其自己相对于所述卫星的二维位置。可以已知方式进行此确定。另外,获得第四卫星信号允许接收装置以已知方式通过相同几何计算来计算其三维位置。无限数目个用户可在连续基础上实时更新位置及速度数据。
如图1中所展示,GPS***100包含围绕地球104运转的多个卫星102。GPS接收器106从所述多个卫星102中的若干卫星接收作为扩频GPS卫星数据信号108的GPS数据。从每一卫星102连续地发射扩频数据信号108,所发射的扩频数据信号108各自包含数据流,所述数据流包括识别所述数据流所源于的特定卫星102的信息。GPS接收器106通常需要来自至少三个卫星102的扩频数据信号108,以便能够计算二维位置。对第四扩频数据信号的接收使GPS接收器106能够使用已知技术计算三维位置。
因此,GPS***允许具有GPS接收器106的装置的用户将其在地球上的位置确定到几米范围内。为了利用此信息,常见做法是依赖于允许在其上展示用户的位置的电子地图。例如TeleAtlas(http://www.teleatlas.com)等提供商示范此些地图。
此些电子地图不仅允许使用GPS***(或通过其它方式)将用户的位置展示于电子地图上,而且其允许用户规划行程路线等(路线选择目的)。为了进行此路线规划,由导航装置来处理电子地图,所述导航装置可由通用计算装置提供。
导航装置的特定实例包括卫星导航装置(Sat.Nav),其方便地称作便携式导航装置(PND)。然而,应记住,本发明的教示不限于PND,而是可改为普遍适用于经配置以处理电子地图(通常)以便提供路线规划及导航功能性的任何类型的处理装置。因此,由此可见,在本申请案的背景下,导航装置意在包括(但不限于)任何类型的路线规划及导航装置,无论所述装置是体现为PND、例如汽车等交通工具、便携式计算资源(例如,执行路线规划及导航软件的便携式个人计算机(PC)、移动电话或个人数字助理(PDA))或服务器,或是体现为跨越网络提供此功能性的其它计算装置。
在图3a及4b中展示所述呈PND的形式的导航装置的实例,且应注意,导航装置200的框图不包括所述导航装置的所有组件,而是仅为许多实例组件的代表。导航装置200位于外壳(未图示)内。导航装置200包括处理电路,所述处理电路包含(例如)上文所提到的处理器202,所述处理器202耦合到输入装置204及显示装置(例如,显示屏206)。虽然此处以单数形式提到输入装置204,但所属领域的技术人员应了解,输入装置204表示任何数目个输入装置,包括键盘装置、话音输入装置、触摸面板及/或用以输入信息的任何其它已知输入装置。同样,显示屏206可包括例如液晶显示器(LCD)等任何类型的显示屏。
在导航装置200中,处理器202经由连接210而操作性地连接到输入装置204且能够经由连接210从输入装置204接收输入信息,且经由相应的输出连接212而操作性地连接到显示屏206及输出装置208中的至少一者,以将信息输出到所述至少一者。导航装置200可包括输出装置208,例如,可听输出装置(例如,扬声器)。在输出装置208可为导航装置200的用户产生可听信息的同时,应同等地理解,输入装置204还可包括用于接收输入话音命令的麦克风及软件。另外,导航装置200还可包括任何额外输入装置204及/或任何额外输出装置,例如,音频输入/输出装置。
处理器202经由连接216而操作性地连接到存储器214,且进一步适于经由连接220从输入/输出(I/O)端口218接收信息/将信息发送到输入/输出(I/O)端口218,其中I/O端口218可连接到在导航装置200外部的I/O装置222。外部I/O装置222可包括(但不限于)外部收听装置,例如,听筒(earpiece)。到I/O装置222的连接可另外为到任何其它外部装置(例如汽车立体声单元)的有线或无线连接,以用于(例如)免提操作及/或用于话音激活的操作、用于连接到听筒或头戴式耳机及/或用于连接到(例如)移动电话,其中移动电话连接可用以创建在导航装置200与(例如)因特网或任何其它网络之间的数据连接,及/或用以创建经由(例如)因特网或某一其它网络到服务器的连接。
导航装置200的存储器214包含非易失性存储器的一部分(例如以存储程序代码)及易失性存储器的一部分会(例如以在所述程序代码被执行时存储数据)。所述导航装置还包含端口228,所述端口228经由连接230而与处理器202通信,以允许可装卸存储卡(通常被称作卡)被添加到装置200。在所描述的实施例中,所述端口经布置以允许添加SD(安全数字)卡。在其它实施例中,所述端口可允许连接其它格式的存储器(例如,压缩快闪(CF)卡、MemoryStickTM、xD存储卡、USB(通用串行总线)快闪驱动器、MMC(多媒体)卡、智能媒体卡、微驱动器等)。
图2进一步说明经由连接226的在处理器202与天线/接收器224之间的操作性连接,其中天线/接收器224可为(例如)GPS天线/接收器,且因而将充当图1的GPS接收器106。应理解,为了说明而示意性地组合由参考数字224表示的天线及接收器,但天线及接收器可为单独定位的组件,且天线可为(例会)GPS片状天线或螺旋天线。
另外,图3及4的便携式或手持型导航装置200可以已知方式连接或“对接”到例如自行车、摩托车、汽车或船等交通工具。可接着将此导航装置200从对接所在地移除以用于便携式或手持型导航用途。实际上,在其它实施例中,装置200可布置为手持型的以允许用户的导航。
参看图3a,导航装置200可为包括集成输入及显示装置206及图3a的其它组件(包括但不限于,内部GPS接收器224、处理器202、电力供应器(未图示)、存储器***214等)的单元。
导航装置200可位于臂状物252上,可使用吸盘254将臂状物252本身紧固到交通工具仪表板/窗/等等。此臂状物252为导航装置200可对接到的对接台的一个实例。可通过将导航装置200搭扣连接到臂状物252而将导航装置200对接或以其它方式连接到对接台的臂状物252。导航装置200可接着可在臂状物252上旋转。为了释放导航装置200与对接台之间的连接,可(例如)按压导航装置200上的按钮(未图示)。用于将导航装置200耦合到对接台及将导航装置200从对接台去耦的其它同等合适的布置是所属领域的技术人员众所周知的。
转到图3b,处理器202与存储器214合作以支持BIOS(基本输入/输出***)282,其充当导航装置200的功能硬件组件280与由所述装置执行的软件之间的接口。处理器202接着从存储器214加载操作***284,所述操作***284提供应用程序软件286(其实施所描述的路线规划及导航功能性中的一些或全部)可运行的环境。应用程序软件286提供操作环境,所述操作环境包括支持导航装置的核心功能(例如,地图检视、路线规划、导航功能及与此相关联的任何其它功能)的图形用户接口(GUI)。就此来说,应用程序软件286的部分包含视图产生模块288。
在正描述的实施例中,导航装置的处理器202经编程以接收由天线224接收到的GPS数据,且不时地将所述GPS数据连同表示GPS数据被接收的时间的时戳一起存储在存储器214内以积累导航装置的一系列位置。经如此存储的每一数据记录可被认为是GPS定位;即,其为导航装置的所在地的定位且包含纬度、经度、时戳及精确性报告。此系列位置可被认为是定位数据。
在一个实施例中,大体上周期性地(例如,每5秒)存储数据。所属领域的技术人员将了解,其它周期将为可能的,且在数据分辨率与存储器容量之间存在平衡;即,随着通过取得更多样本而使数据的分辨率增加,需要更多存储器来保持数据。然而,在其它实施例中,分辨率可为大体上每:1秒、10秒、15秒、20秒、30秒、45秒、1分钟、2.5分钟(或实际上,这些周期之间的任何周期)。因此,在装置的存储器内,积累了装置200在各时间点处的行踪的记录。
在一些实施例中,可发现,所捕捉的数据的质量随着周期增加而减小,且同时降级的程度将至少部分地视导航装置200移动的速度而定(约略15秒的周期可提供合适上限)。
另外,处理器202布置成不时地将装置200的行踪的记录(即,GPS数据及时戳)上载到服务器。在导航装置200具有将其连接到服务器的永久的或至少通常存在的通信信道的一些实施例中,周期性地发生数据的上载(其可为(例如)每24小时一次)。所属领域的技术人员将了解,其它周期为可能的,且可大体上为以下周期中的任一者:15分钟、30分钟、每小时、每2小时、每5小时、每12小时、每2天、每周或在这些周期之间的任何时间。实际上,在此些实施例中,处理器202可经布置以大体上实时地上载行踪的记录,但这可能不可避免地意味着事实上数据被不时地发射而在发射之间具有相对较短的周期,且因而数据可被较为正确地认为是伪实时的。在此些伪实时实施例中,导航装置可经布置以在存储器214内及/或***于端口228中的卡上缓冲GPS定位,且当已存储预定数目时发射这些GPS定位。此预定数目可为大约20、36、100、200,或这些数目之间的任何数目。所属领域的技术人员将了解,所述预定数目部分地由存储器214/端口228内的卡的大小控管。
在不具有通常存在的通信信道的其它实施例中,处理器可经布置以在通信信道被创建时将记录上载到服务器。这可(例如)在导航装置200连接到用户的计算机时发生。并且,在此些实施例中,导航装置可经布置以在存储器214内或***于端口228中的卡上缓冲GPS定位。如果存储器214或***于端口228中的卡变得充满GPS定位,那么导航装置可经布置以删除最旧的GPS定位,且因而,其可被认为是先入先出(FIFO)缓冲器。
在正描述的实施例中,行踪的记录包含一个或一个以上迹线,其中每一迹线表示导航装置200在24小时周期内的移动。每一24小时周期经布置成与日历日一致,但在其它实施例中,无需为此情况。
服务器150经布置以接收装置的行踪的记录,且将此存储在大容量数据存储装置内以供处理。因此,随着时间过去,大容量数据存储装置累积已上载了数据的导航装置200的行踪的多个记录。一般来说,服务器将收集多个导航装置200的行踪。
服务器可接着经布置以根据所述装置或每一装置的所收集的行踪而产生速度数据。此速度数据可包含时变速度概况,其展示沿着地图的可导航段的平均速度如何随着时间变化。
图7展示电子地图的实例,在所描述的实施例中,跨越网络(在此情况下为因特网)在导航装置上检视所述电子地图。在本文中正描述的实施例中的任一者中的第一步骤为产生此电子地图1900。可在http://routes.tomtom.com/?Lid=l#/map/?center=55.01%2C-3.445&zoom=4&map=basic检视所述地图。
为了实现图7的将被用于路线选择目的的电子地图,所述电子地图具有一系列节点,所述电子地图的用户通常看不到所述节点。因而,节点等等可通常被称作地图数据。然而,为了便于理解,在图6中展示节点300中的一些节点。这些节点被设在可导航段(在此情况下为道路段)的交叉点、末端区等等处,且被用于路线选择的目的。当用户要求其导航装置规划在两个点或两个以上点之间的路线时,所述导航装置规划地图的相关节点之间的路线。因而,地图数据可用以根据由导航装置的用户设定的至少一个准则来产生路线。
所属领域的技术人员将了解,电子地图还包含提供道路段的形状、建筑物的入口的所在地等等的其它节点。
因此,每一节点300具有从其发出的、用户可沿其行进的至少单个道路段,且通常为多个道路段。举例来说,节点302具有四个此种道路段304a、b、c、d。在其它实施例中,可导航段可表示并非道路的路径的段,例如,人行道、自行车道、沟渠、铁路、道路段、轨道等。然而,为方便起见,参考道路段。因此,如图7中所展示的地图向其用户展示多个道路段,所述多个道路段中的每一者表示在由所述地图覆盖的区域中的可导航路线的一部分。
已知路线规划方法(例如,迪科斯彻(Dijkstra)方法、A*方法或穆尔/裴帕(Moore/Pape)方法)。然而,这些路线规划方法在计算时间方面可为极其慢的。在US6636800中展示了如何可增加此路线规划的速度的实例,所述案的教示特此以引用的方式并入本文中。
本文中所描述的实施例在预处理步骤中产生含有最小成本数据的所谓的侧文件(sidefile),所述最小成本数据由导航装置用以在处理电子地图时加速路线的产生。可将此信息以可被称为位向量的形式保持为二进制数据;即,0与1的串。因而,所述侧文件还可被认为是地图数据,但可与电子地图一起或不与电子地图一起供应侧文件(例如,如图8中所展示)。因此,本发明的一些实施例可将地图数据提供为可与侧文件分离的地图,而本发明的其它实施例可组合地图与侧文件数据。
然而,所属领域的技术人员将了解,如果使用侧文件,那么所述侧文件应与电子地图(针对其而产生所述侧文件)一起使用。如果并未执行此,那么可想象,将获得不正确路线(例如,未使由其用户设定的成本公式最小化的路线)。
并且,本发明的不同实施例可指定用于产生最小成本数据的不同参数(在此实施例中,为一系列位向量)。因而,如果使用所产生的地图数据的后续路线规划使用了与用以创建最小成本数据的所述参数不同的参数,那么所述最小成本数据不太可能对所述路线规划有用。
举例来说,一些实施例可产生用于乘汽车行进穿过地图的最小成本数据。如果后续路线规划系用以产生用于步行的路线,那么汽车特定最小成本数据不太可能为有用的。在另一实例中,一些实施例可产生在假定用户乐于沿着高速公路、收费道路等等行进的情况下的最小成本数据。在后续路线规划中,如果用户请求利用高速公路、收费道路等等的路线,那么所述最小成本数据不太可能为有用的。
本发明的一些实施例可产生最小成本数据的多个集合,其各自具有预定准则的不同集合。举例来说,本发明的实施例可约略产生以下各项中的任一者:2、3、4、5、6、10、15,或更多集合的最小成本数据。
因此,在一些实施例中且为了产生侧文件,在地图预处理步骤中,将节点划分到多个区中,且因而,任何地图均被划分成已知数目个区-例如,N个,且确定所述区之间的最小成本路径。此预处理产生可与地图一起利用的数据以便增加路线规划方法的速度。
通常,在使用地图数据之前执行预处理,而不管所述地图数据将用于网站上还是用于例如PND等装置上。因而,预处理步骤常常被称作服务器侧进程。
虽然任何通用计算装置均将适于执行预处理,但所属领域的技术人员将了解,装置的性能越高,预处理将执行得越快。通常,将X86架构计算装置用于预处理。此种X86架构装置将通常运行例如MicrosoftTMWindowsTM、UNIX、LINUX、OSXTM等等的操作***(OS)。然而,其它实施例可使用例如RISC架构等其它计算平台。
并且,如别处所论述,可并行执行预处理,且因而,可在多个计算装置上或至少在多个处理器核心(其可为虚拟或真实处理器核心)上执行预处理。
作为下一预处理步骤,处理一区内的每一道路段(例如,304a-d)以确定其是否为到所述地图内的所述数目(N)个区中的每一区的最小成本路径的部分,且产生位向量(最小成本评估)。因此,对于一区的每一道路段,位向量针对地图的每一区包含一位。即,位向量包含N-1个位(除在考虑中的区外,每一区1个),其经设定成0或1,取决于所述道路段是否形成到由所述位表示的区的最小成本路径的部分。一些实施例可添加额外位以提供进一步信息,例如,标头、可见度区域、相邻区域等等。
所属领域的技术人员将了解,在此意义上,可对照若干不同成本准则确定最小成本路径。举例来说,可对照以下准则中的任一者判断最小成本:最短距离;最短行进时间;花费最小(在环境影响方面);使用最少汽油;产生最少CO2,等等。在本实施例中,对照最短行进时间来判断最小成本。
在本发明的此实施例中,针对多个成本准则(成本函数)中的每一者确定最小成本路径。因此,所得侧档案可识别任何两个区之间的可适用于任何一个时间的一个以上最小成本路径,每一最小成本路径针对一不同成本准则(成本函数)。举例来说,最快路线的最小成本路径可不同于最具燃料效率的路线的最小成本路径。
因此,所属领域的技术人员将了解,对于覆盖大量区域的地图来说,N很可能为较大的。因此,预处理可花费大量时间。
因此,在(例如)覆盖西欧及中欧的实例地图中,通常可能存在40,000,000个节点,其具有100,000,000个道路段。假定在地图内存在100个区,那么N等于100,且存在100,000,000×100(N)个;即,需要10x109个位来存储所述地图的每一道路段的99(即,N-1)个位。在使用下文所描述的本发明的实施例的情况下,此地图可能使用约略500Mb的存储装置。
WO2009/053410论述指派速度概况的方法,所述速度概况提供随着时间而变的沿着地图的可导航段的速度。此申请案的内容特此以引用的方式并入本文。因而且出于路线选择的目的,可导航段是否构成到另一区的最快速路线的部分将根据时间而变化。即,随着交通密度增加/减小(例如,在高峰时间等),使用可导航段分别将变得较不/较合意。
一些实施例可针对每一道路段存储多个位向量。所属领域的技术人员将了解,记录速度的分辨率越高,所需位向量的数目越高。然而,其它实施例可利用时变函数来对最快速路线作出评估(非常像WO2009/053410中所描述)。
在跨越电子地图进行路线规划时,相信,有必要能够使用约略百分之一秒精确度的时间粒度进行路线规划;即,能够将从节点的出发时间指定到0.01秒的精确度以便正确地确定最低成本路线。
因此,在考虑此精确性的等级时,将了解,上文所考虑的具有40,000,000个节点及100,000,000个道路段的地图具有穿过其中的100,000,0002个可能的路线。当进一步考虑时间维度时,路线的数目进一步增加:7(即,每周天数)×24(即,每日小时数)×3600(即,每小时秒数)×100(即,每秒的百分之一秒数)×100,000,0002=604.800.000.000.000.000.000.000(千的七乘方)个可能的路线。在当前处理等级且在使用在每一时间间隔处探索每一段的单纯方法的情况下,将花费19.178.082.191.780.821年。申请人当前销售的西欧及中欧的地图具有120,000,000个道路段,藉此进一步增加此时间。
因此,将了解,为了在预处理阶段中存储并处理数据,需要大量数据。
因而,本发明的实施例使用技术以便显著减少预处理的量。现在更详细地描述这些技术,且本发明的一些实施例可能利用所有所述技术,而其它实施例可能仅利用所述技术中的一些技术。
本发明的不同实施例可使用下文所概述的特征的不同组合。因而,一些实施例可利用所描述的全部技术以减少信息的量。在另一极端,其它实施例可能不利用所述技术当中任一者来减少数据。
本发明的一些实施例不计算不符合预定准则的道路段的位向量-如步骤1902所展示。举例来说,如果不可能以预定运输类别沿着道路段行进,那么可能不计算所述道路段的位向量。
因此,在将运输模式的准则设定成汽车的实例中,可能不计算以下道路段的位向量:
·铁路;
·存在于地图数据中的未对应于道路段的段;
·错误(非法)方向上的单行道路;
·不可由某运输形式通行的道路段(例如,在考虑汽车的驾驶性时的行人徒步区、人行道);
·非决策点处的道路段(即,不能从道路段避开);
网络的减小
一种技术为减小经考虑以评估道路段是否形成最小成本路径的部分的网络的大小;减少道路段的数目会减小进行计算所花费的时间量,如步骤1904处所展示。
为了说明此技术,还在图6中展示如图7中所展示的道路网络,但从其删除了对于最小成本评估来说没有用的道路段。对网络的此减小旨在提供最小子网络,应对所述最小子网络进行最小成本评估。
在数学术语中,被留下的且如图7中说明的网络可被描述为图7的道路网络的最大强组成部分的不定向表示的最大的双向连接的组成部分。通过将标准技术应用于两种强连接性(还称为双向连接性)同时适应于道路交通规则(例如,转弯限制及本地准入(localaccess))来确定核心网络。所属领域的技术人员将了解,强连接性指示在两个节点之间在两个方向(即,从A→B以及B→A)上行进为可能的。
因此,参看图5与7两者,可见,已删除例如死胡同250、冗余环路252等等的无出口的路。然而,将看见,在已被移除的道路段的起点处剩余有节点(例如,图7中的400)。这是由于下文中所论述的原因。
在减小到核心网络之后(例如,如图7中所展示),分割核心网络以提供上文所描述的区。在所描述的实施例中,根据多路弧分离器(multiwayarcseparator)来分割网络。所属领域的技术人员将了解,在此网络中,如果由区边界等分的道路段(即,弧)被移除,那么留在任一区中的道路段将不连接到任何其它区。
分割网络-步骤1906
然而,在执行分割之前,进行以下步骤:
1.独立地确定并分割岛屿。岛屿趋向于与网络的其它部分物理上分离,且藉此通过例如轮渡链等等的方式而链接。这些以与典型道路段不同的方式表现(即,平均速度显著较低,等等),且如果此些链接被包括于分割中,那么所述方法不会有像预期一样好的性能。
2.收缩由网络中的一个以上节点表示的十字路口、环形道及其它接点,使得属于同一十字路口等等的节点不会落到不同区中。
3.收缩所有可导航段共享相同特性集合(例如,轮渡段、禁止驾驶、禁止通行等等)的简单路径(即,不具有转弯可能性的两个节点之间的连接)以减小传递到分割***的网络的输入大小。举例来说,查看图6,可将节点308折叠到道路310上。
本发明的正描述的实施例使用分治(divideandconquer)方法,在http://labri.fr/perso/pelegrin/scotch处概述所述分治方法。本文中所概述的方法划分地图以包含若干个区,所述区并不基于地图的区域,而是基于区内所含有的节点的数目。具有经如此组织的节点具有以下优点:其可有助于使使用所述区的路线选择更有效率,因为其有助于递送具有类似本地搜索直径的区。
每一节点具有与其相关联的包括区ID的身份编号,且因而,同一区中的节点具有相同区ID号。节点属于在L个层级式等级处的区。按照惯例,等级0为最粗略等级(用于长距离路线选择)。等级L-1为详细等级。
方便地对节点的最大数目设定上限且允许低于此上限的某种灵活性,而不是设定任一区内含有的节点的绝对数目。举例来说,所述方法可指定每区最大节点数目为100个,这可导致每区通常有60个到100个节点的节点散布。上限被认为比固定数目个节点有利,因为固定数目可导致具有强制形状的区,这又导致在使用所述区时的次最佳的路线选择。
多个等级
在所描述的实施例中,执行分割以提供多个等级的巢式区,在图9中在概念上示范所述区。从图9将清楚,存在层级本质,其中将最低等级(0)再分以提供等级1,又将等级1再分以提供等级2。
每一区中的节点的数目在等级之间变化,且与较低等级相比,较粗略等级(其趋向于覆盖较大地理区域)具有更多节点。因而,通常出于长程路线选择目的而使用正描述的实施例中的较粗略等级(例如,等级0),而较精细等级(例如,等级2)用于短程的路线选择。
每一道路段的位向量的一部分包含针对所述等级中的每一者的位。位的数目为每一等级中的区的数目。
为了提供要编码的数据量的概念(在典型实施例中,等级的数目将通常为L=3):
·全局等级=0,将通常具有100个区。
·中间等级=1,将通常针对等级0的每一区具有10个区(即,100×10)。
·最详细等级=2,将通常针对等级1的每一区具有5个区(即,100×10×5)。
使用层级式等级为有利的,因为其减小(可能显著减小)所需的处理量。在正描述的本实施例中,存在100×10×5个区(即,5000个区)。因此,在具有相同数目个区的平坦结构中,将要求本文中所概述的方法涉及5000个区。然而,在本文中所描述的实施例中,可通过参考处于适当等级中的节点来减少此数目。
一旦已知地图的各个因素,等级的数目及每等级的区的数目将通常被调谐。举例来说,多少存储装置可被分配给地图,以及路线选择的应有执行速度。所属领域的技术人员将了解,存在折衷,因为随着预处理的量增加,那么地图大小变得较大以保持数据,但是可使用所述地图来计算较快速路线。
在一个实施例中,存在3个等级的区。然而,在其它实施例中,可能存在任何数目个等级。举例来说,可能约略存在以下数目个等级中的任一者:1、2、4、5、6、7、8、9或10。
因此,在使用上文的实例(通常具有40,000,000个节点及100,000,000个道路段的西欧及中欧的地图)的情况下,使用最单纯编码将针对每一等级的每个节点的区ID使用固定大小编码,且针对每一等级的每一道路段使用固定大小位向量(arp旗标)。因此,可易于将此基本编码的大小计算如下:
·等级0处的每一节点区ID将使用log_2(100)位=7个位
·等级1处的每一节点区ID将使用log_2(10)位=4个位
·等级2处的每一节点区ID将使用log_2(5)位=3个位
·等级0处的每一位向量(arp旗标)将使用100个位(100个区减去针对当前区的1)
·等级1处的每一位向量(arp旗标)将使用10个位(10个区减去针对当前区的1)
·等级2处的每一位向量(arp旗标)将使用5个位(5个区减去针对当前区的1)
图9展示最粗略的区等级600,其在所述图中提供6个区1到6。将这些区中的每一者再分成更多的区(在此实施例中,九个子区),如由粗略区等级600内的虚线道路段表示。在所描述的实施例中,使用另一等级的再分,其中还再分由虚线道路段提供的区中的每一者,因而提供三个等级的分割,但为了便于参考未在图9中展示这些等级。其它实施例当然可使用较多等级(例如,4、5、6、7个或更多等级)或较少等级(例如,1或2个等级)。
因此,本发明的实施例针对较精细等级区引入所谓的可见度区域,步骤1908。k区的可见度区域为一组(k-1)个区,其中可在旗标集合中的所述区自己的位上区别所述区。自然地,可见度区域总是包括给定k区所属于的(k-1)区。另外,可见度区域可能含有一些相邻的(k-1)区。将在预处理期间计算可见度区域,且将可见度区域与位向量相关联地存储。
还可从相反侧看出k区与其(k-1)等级的可见度区域之间的关系:每个(k-1)区知晓其由位于邻域的k等级区组成的***(outskirt)。以此方式,可看出道路段的旗标集合不再贯穿整个地图具有固定长度;实情为,每个1区中的位向量具有其特定长度A+B+C+N***0+N***1。其中A指代区的最粗略等级,B指代中间粒度区,且C指代最精细粒度的区(在存在三个等级的实施例中)。
后续预处理在最短路径计算之前计算可见度区域以产生位向量。可将找到可见度区域的方法描述如下:
对于每一k区来说,开始区相邻图中的广度优先搜索;
接着对于每一到访过的k区(其位置足够接近开始区),将其含有的(k-1)区添加到可见度区域。
“接近”关系应将地理量度(例如,区中值点之间的距离)与图理论距离两者考虑在内。(因此,如果一区在地理上为远的但通过快速连接而链接到当前区,那么所述区可为“接近”的。同样,如果难以在区之间行进,那么一区可被认为“遥远的”(即使其在地理上接近))。
确切的阈值可经受实验调谐,因为其视地图特定的特性(如都市区域的平均直径)而定,其最易受上文所描述的负面效应(例如,增加的预处理等等)影响。具有格外长行进时间的可导航段(如轮渡或禁止驾驶的道路段)在相邻图遍历(adjacencygraphtraversal)期间被隐藏,这样可见度区域总是限于单一岛屿或属于同一区的小群岛屿。
因此,在广度优先搜索期间到访过的区构成R的邻域。完全覆盖所述邻域的下一较粗略等级的区的包括最小(inclusion-minimal)集合被称为R的可见度区域。反向关系被称为附近(vicinity):区Q(等级L处)的附近列表是由在等级L+1处的在其可见度区域中有Q的所有区组成。
为了提供特定实例,且参看图9,可见度区域的实例如下:
如果决定每一1区与其可见度区域的边缘之间的最小距离应为至少1,那么一些选定1区的可见度区域将由以下0区组成(自己的0区可被省略,因为其总是存在):
·15:
(即,等级1区第15号不具有可见度区域,因为其处于其等级0区的中心)。
·28:5
(即,等级1区第28号具有为区(等级0)第5号的单个可见度区)。
·37:2,5,6
(即,等级1区第37号具有三个可见度区,其为等级0区2、5及6)
除了考虑等级1区的等级0邻居,还确定每一等级0区的等级1邻居。因此,作为实例,
·1:21,24,27,28,41,42,43,51
(即,对于等级0区第1号,等级1区为:21、24、27、41、42、43、51)。
因此,在此实例中,可看出,区28被列出,尽管其不在区2的最左侧列中。这(例如)可能因为区28具有到区1的快速链接,且因而当在时间而非距离方面进行考虑时为接近的。所属领域的技术人员将了解,可对照例如环保性(greenness)(最少CO2或其类似者)等其它量度来判断接近性。
邻居列表的编码
与图9相比,图9a展示可使用的等级的更多细节。等级0为最粗略等级且可被认为是等级k-1。为简易起见,在图9a中,仅展示区1到区4(即,602;604;606;608)。这些k-1区中的每一者进一步被划分成9个区(1到9),其可被称作k等级区或等级1区。另外,这些等级1区中的每一者被划分成4个k+1等级区(即,等级2区)。
位向量的产生
一旦网络已被分割成三个等级的区,那么其经处理以确定到所述区中的每一者的最小成本路径,且为区内的每一道路段创建位向量,步骤1910。因此,如上文所论述,关于成本公式来分析任一区内的每一道路段,以确定其是否为到每个其它区的最低成本路径的部分。产生一区中的每一道路段的位向量,如图7中所展示,为便于理解,图7展示简化的位向量。
还应了解,确定最小成本路径,其不仅针对单个时间段,而是针对多个时间段来计算(如下文中所描述)。
针对图7中所展示的网络(即,减小的网络)来执行此计算。网络的已被移除的部分被有效地折叠到其所源于的节点上。举例来说,图5上所展示区250被折叠到图7中的节点400上。
将看出,每一位向量包含三列:含有在考虑中的道路段的起始处的节点的身份编号的最左侧列700;含有在考虑中的道路段的末端处的节点的身份编号的第二列702;及含有所述道路段的位向量的第三列704。因此,将看出,每一道路段由两个节点识别,在道路段的每一末端处存在一个节点。
可使用任何合适的路线选择方法来确定道路段是否为最低成本路线的部分。在此特定实施例中,使用众所周知的迪科斯彻方法来探索整个网络。
然而,可通过使用各种策略来减少处理时间的量。所属领域的技术人员应了解,上文所描述的用于减小网络的技术还将减小处理时间的量。本发明的实施例可使用以下各项中的任一者或一者以上:
·同时计算对应于一区的所有位向量条目。在反向图中,针对每一边界节点得出最短路径树。此方法为有利的,因为可并行处理每一区,藉此减少处理时间。
·减少对类似最短路径子树的重新计算。
·不重新计算已经产生的位向量。
因此,总之,一个实施例可执行以下操作以便产生位向量:
准备步骤:
1.如所属领域的技术人员将了解,经由电子地图的搜索可由有向非循环图(DAG)表示。此图及伴随数据结构(转弯成本及长扩展表)为反向的。
2.收缩关于最精细等级的简单道路段(即,将端节点一者折叠到另一者上,如别处所论述)。如果道路段由次数=2的一个或一个以上节点组成(所有节点均位于给定等级的同一区中),且可导航段具有相同属性:例如“是轮渡”、“禁止通行”及“禁止驾驶”,那么所述道路段被称为简单的。
3.对于每一区,视头(即,来自_节点)及/或尾(即,去往_节点)节点是否属于所述区而定,将道路网络的道路段分类成三组:出端口、入端口及内部道路段。即,如果头与尾两者在同一区内,那么道路段被称为内部道路段;如果头在区内但尾不在区内,那么道路段被称为出端口道路段;且如果尾在区中但头不在区中,那么道路段被称为入端口道路段。
4.对离开禁止通行及禁止驾驶区域的所有道路段设立特殊转弯限制。
预处理例程以从下到上方式进行,以最精细分割等级-即,在正描述的实施例中以等级2开始。在每一等级的区处,针对每一区R重复以下步骤:
1.确定R的探索区域。在最高等级(例如,正描述的实施例中的区0),其为整个图,在较精细等级,其为由R的可见度区域限制的子图(如上文所描述)。
因此,在中间等级(即,等级1)处,仅针对等级0区的含有所述等级1区的可见度区域执行以下步骤。在等级0(应记住,其用于长程路线选择)处,考虑整个图的道路段。
收集可见度区域的入端口道路段,即,从区域外部的节点通向所述区域内的道路段。接着收集边境道路段,即,在入端口道路段之后的道路段。如果头(L1)=尾(L2)且不禁止从L1到L2中的转弯,那么将道路段L2称为在L1之后(及L1在L2之前)。为了找到边境道路段,将复杂十字路口收缩成单一节点。具有“禁止驾驶”属性的轮渡道路段及道路段不被视为边境道路段。
以此方式收集入端口道路段可减少(可能显著减少)在下文中所描述的探索步骤中所需的处理量。探索步骤可减少对图的探索而考虑那些到给定区的包括入端口路线的路线。
2.对于R的每一出端口道路段来说,找出根道路段及探索步骤的数目。如果出端口道路段为其位于R内的前任者(predecessor)中的至少一者的唯一后继者,那么此出端口道路段为仅有的根道路段,且执行单个探索步骤。否则,如果出端口道路段为双向的(即,可在两个方向上行驶),那么将所述道路段自身及其相反(入端口)道路段取作单个探索步骤的根道路段。否则,如果出端口道路段为单向的,那么将每一前置的内部道路段(且如果存在,其相反道路段)取作用于单独探索步骤的根道路段。最后,不管出端口道路段的种类是什么,对于穿过出端口道路段的每一交通扩展路径,将所述扩展的开始道路段(如果其位于R内)取作用于单独探索步骤的根道路段。
在较精细等级(即,除了等级0之外的所有等级)上,特殊对待出端口轮渡道路段。如上文所提到,在确定区的邻域时,忽略轮渡道路段。如果轮渡道路段的头部区不属于R的可见度区域,那么将执行单个探索步骤,其中轮渡道路段为唯一根道路段,且探索区域被约束到头部区自身。
3.执行经调度的探索步骤(下文中所描述)。
4.追溯从探索区域内的道路段到根道路段的最短路径。在除了最高等级(即,等级0)之外的所有等级处,相应跟踪起始于的道路段的排序会影响结果。假设R为等级L区(其中L>0),那么首先处理等级(L-1)区的出端口道路段,接着处理等级L处的剩余出端口道路段,并依此处理到最精细等级;相对于最精细等级来说为内部(且尚未被移除)的道路段被最后处理。每当遇到已在较早跟踪中到访过的道路段时,都没有必要再次沿着所述路径前进。在跟踪的同时,为每一到访过的道路段设定适当的目标位向量。在除了最高等级(即,等级0)之外的所有等级处,进行额外动作:
在路径已初次横穿某等级L区边界之后,用运输道路段旗标来标记所述边界道路段及去往根道路段的所有其它道路段;
用U形转弯旗标来标记最短路径进行U形转弯的节点。
最后,在除了最精细等级外的所有等级处,填充相关矩阵条目。
在处理所述级的所有区之后,针对下一等级而简化所述图。首先,移除未标记为运输道路段的所有道路段。接着,收缩积累的新的简单路径;保留被标记为U形转弯节点的节点。
最后,根据相关矩阵将位向量传播到在处理此等级之前移除的道路段。
相关矩阵
本发明的一些实施例使用相关矩阵,其存储对道路段设定位向量所需的目标区之间的关系。在除了最精细等级之外的每一等级L处,产生且使用新的相关矩阵。在等级L处,矩阵的行按等级(L+1)区编索引,列按等级L区编索引,且每一矩阵条目为零或零个以上等级(L+1)区的集合。在较低等级处,大多数矩阵条目等于空集,即,矩阵为稀疏的。
相关矩阵的目的是为了帮助对已在较早阶段删除的道路段设定位向量。这些道路段未包含于由等级L探索步骤导致的有向非循环图中,但如果其尚未被删除,那么其将包含于有向非循环图中。更精确地说,相关矩阵用以对在S的探索区域中的道路段(在>L(其中L不为最精细等级)的某等级的计算期间,其已被删除)上的某等级L区S设定位向量。对于包含于S的探索区域中的等级(L+1)区R,矩阵元素M[R,S]将最终为在R的可见度区域的边界处的等级(L+1)区的集合,使得从S到R的所有最短路径(在反向图中)均穿过所述区中的一者。
当创建矩阵时,将所有条目初始化成空集。接着,对于所有等级L区S,执行以下两个动作。
1.矩阵创建:对于根道路段l在S及所得有向非循环图D中或上的每一探索步骤,针对包含于S的探索区域中的每一等级(L+1)区R,及针对R的每一入端口道路段l′,将矩阵元素M[R,S]更新如下:
用A表示R的探索区域(如较早针对等级L+1而计算)。在D中从l′追溯路径到l且检查其是否离开A:如果此路径上的道路段从等级(L+1)区T转到等级(L+1)区T′(其中T仍包含于A中,但T′未包含于A中),那么将T添加到集合M[R,S],且处理下一l′。
2.读取矩阵:对于S的探索区域中的已在等级L计算开始之前被删除的每一道路段,令R为所述道路段结束于的等级(L+1)区(再一次,相对于反向图来说)。现在将在所述道路段上的区S的位向量位设定成区T的位向量位的逻辑“或”,其中T包括M[R,S]的所有元素。
注意,将已在较早等级处直接根据某有向非循环图或按照涉及某较低等级处的相关矩阵的类似程序设定每一T的位向量位。
探索
探索步骤由创建以给定道路段(对)为根的最小成本路径的有向非循环图组成。此是通过使用用于最小成本计算的众所周知的迪科斯彻方法的变化形式来实现。可自由选择要最小化的目标函数,例如,行进时间或估计燃料消耗,或别处所论述的其它因素中的任一因素。
一个实施例使用行进时间、路径长度及抑制不当转弯及机动的其它惩罚项的加权总和。
对经典(迪科斯彻)方法作出以下修改:
1.其对道路段图起作用,即,正到访、放松等等的项目为道路段,而非节点。此有用于允许所述方法考虑到转弯限制及/或交通扩展。
2.标签中的目标函数为在根道路段的针对到达时隙的固定集合的两个一组(行进时间、成本)的向量。选择时隙以使得覆盖所有相关交通模式(自由流动、工作日早晨高峰时间、傍晚高峰时间,等等)。在下文关于评估多个时间段时的成本的论述中进一步详述此内容。
3.可针对给定道路段存储一个以上标签。如果两个标签上的待决(未完成的)交通扩展的集合不相等,那么所述标签自身被称为独立的且两者均在随后道路段上不断传播。否则,如果不同到达时隙的成本函数值之间的关系不交替(即,一个标签明显比另一标签好),那么丢弃较差标签。否则,通过合并每一时隙的较好值而产生新标签,将其代替原始标签来传播。经合并标签的前任者集合于是为原始标签的前任者集合的联合。
4.在每一双向道路段上产生特殊U形转弯标签。所述标签编码在两个方向上开始真实(非反向)路线的可能性。不传播U形转弯标签,且不可将U形转弯标签与一般标签合并。然而,U形转弯标签影响设定位向量时的回溯阶段:仅在开始标签不比同一道路段上的U形转弯标签差时,最短路径才被加上旗标。
在较精细等级处(其中将探索区域限于区的集合),永久地监看如上文所界定的边境道路段。一旦搜索前端到达所有边境道路段,就根据每时隙的最大(=最差)成本函数值创建监看梳(watchcomb)。接着,在探索区域外部的道路段上的标签在弹离堆积时,仅在所述标签在至少一个时隙中的成本函数值低于当前监看梳的情况下被传播。如果探索区域伸展越过若干岛屿,那么针对每一岛屿维持单独的监看梳。
时变函数
本发明的一些实施例可计算展示在多个时间段而不是在单个时间处跨越网络的最小成本路径的位向量。所属领域的技术人员将了解,穿过道路网络的最低成本路线可归因于交通密度等等的影响而随着时间变化。因此,对于任一节点,可能存在两个或两个以上最小成本路径,每一最小成本路径是针对不同时间。在此实施例中,不以关于何时最小成本路径可适用的时间基准来译码位向量。位向量仅被设定成将可导航段识别为是最小成本路径的部分或不是最小成本路径的部分。因此,当使用最小成本数据进行路线选择时,路线选择算法将必须考虑来自节点的所有可能的最小成本路径。现在借助于图10a简要描述此过程。
在网络的标准迪科斯彻探索中,当探索网络时,所述方法使用为了到达网络中的所述点迄今所发生的总成本加上尚待发生的预期成本。
因此,一些实施例利用函数而非离散值来作出在每一节点处的成本评估。因此,在图10a中,图751的正被探索的每一节点(例如,750)具有与之相关联的成本函数,其识别正探索的参数(例如,时间、花费的燃料或其类似者)如何随着时间而变化。
成本函数可与道路段而非节点相关联。
所述方法接着处理花费的成本以通过将当前节点处的函数与迄今已累积的成本求和来添加估计成本以产生新函数。图10a中所展示的实例在752处展示已在节点750处通过搜索方法产生的成本函数,且展示行进时间(y轴)如何随着出发时间(x轴)而变化。将看出,成本函数归因于早晨及傍晚高峰时间而在点754及756处增加。
在一个特定实施例中,以5分钟间隔存储成本函数(例如,道路段上的平均速度);即,其为具有5分钟的时间周期的经量化函数而非连续变化的函数。
如果道路段针对任何成本函数在任何时间段均为最低成本路线(最小成本路径)的部分,那么设定所述道路段的位向量。
将核心数据投射到整个网络
上文描述了如何减少地图中所含有的网络以便减少必须由分割方法考虑的道路段及节点的数目。然而,还应进一步考虑在减少步骤中被删除的节点,以便路线选择方法仍可产生去往或来自被删除的道路段及节点的路线。
因而,将被删除的节点及道路段指派到与在核心网络中其所连接到的节点相同的区。
压缩
如所论述,所产生的位向量的大小为非常大的,且因此需要压缩信息。本发明的实施例可以不同方式执行此压缩。然而,一个实施例利用各种技术来压缩、聚结位向量及/或使位向量相关,接着是对所述位向量的后续霍夫曼编码。
因此,一些实施例可试图并确保存在位向量的不均匀分布,因为这可有助于确保霍夫曼编码比在其它情况下更有效率。
举例来说,如果位向量分布如下:
00000....(49%的时间)
11111....(49%的时间)
?????...(2%的时间)
那么可能需要在霍夫曼编码之前操控位向量以具有更不均匀的分布,例如:
00000....(79%的时间)
11111....(19%的时间)
?????...(2%的时间)
减少所产生的位向量
为了减少需要产生的位向量的量,本发明的实施例可使用以下策略中的任一者或一者以上:
·并非针对所有节点使用区ID,而使仅针对可导航节点产生区ID(例如,忽略对应于铁路的节点)。
·并非所有道路段均需要位向量,且位向量可用于决策节点周围的决策道路段。可通过查看道路段数据来确定决策节点及决策道路段(如本文献中所描述)。
·尽管存在许多可能的位向量,但一些位向量远比其它位向量频繁,所以特殊编码可用于最频繁的位向量(例如,000...000及111...111)。
·并非000...000或111...111的位向量的大多数位仍常常设定成1,或设定成0。所以部分块的霍夫曼码应相当高效地编码所述位向量。
·在彼此接近的节点中,位向量常常相同,所以增量(delta)编码可高效地编码所述位向量。
·可通过按源区将目的地区ID重新排序来使不同区具有更类似的位向量模式(想法描述于本文献中)。
·或者节点的道路段周围的所有位向量应总是给出111...111。这适当地可用以更高效地编码位向量。
下文中进一步详细论述这些情况中的一些情况。
这里值得注意的是,本文中所描述的技术旨在减小位向量的大小。然而,应注意,出于路线选择的目的使用地图数据的装置需要对数据的随机存取。通常,对数据的高效编码需要可变大小,然而,这将阻止对数据的随机存取。
因而,本发明的实施例可使用一种折衷,其中数据被编码为一系列加索引的页,且接着利用所述页内的可变编码。在此些实施例中,可实现对每一页的随机存取(经由索引)。一旦一页已被存取,那么实施例可随后解码整个页。这提供效率与地图大小之间的折衷-增加每页的节点的数目会减小地图大小,但使数据存取变慢。本发明的一个特定实施例使用每页16个节点。将了解,任何一个节点还可具有离开所述节点的不同数目或道路段。因而,即使可能存在相同数目个节点,每页仍可存在可变量的道路段。另外,对于存储在每一页上的位向量中的每一者,还可发生不同压缩。
此结构可导致如图11中所展示的地图格式。在此图中,对Arp旗标的参考与位向量同义。将数字“n”存储在标头内,且可针对不同地图变更所述数字“n”,以便优化所述地图的性能。
调谐“n”为在地图大小与在解码地图数据时的存取速度之间的折衷:
·大的n值将把许多节点分组在一起,这对于地图压缩有益,但对于对数据的随机存取的速度不利。
·小的n值将把少数节点分组在一起,这对于对数据的随机存取的速度有益,但对于地图压缩不利。
·可将“n”设定成(例如)4,即,16个始发节点(始发节点在道路段的开始端处-即,图10的列700)的页,但应记住,每一始发节点具有若干个到达道路段(to-roadsegment),所以在假定平均有3个到达道路段的情况下,每一者意味着每一页的存储量相当于约48个道路段。
在此格式中,取决于经编码的区的等级,数据具有不同格式。图12展示等级0(即,最粗略区)的格式的实例,且图12展示其它等级的区的实例格式。
位向量及相关信息存储在数据结构中,在图11中展示所述数据结构的格式,所述格式包含以下各项:标头800;用于稍后描述的霍夫曼编码中的霍夫曼树802;每一层级中的区计数804(在每等级具有恒定数目个区的情况下为空的);区邻居806(在无区邻居的情况下为空的);区ID重新映射表808;位向量页索引(2n个节点)810;及区ID与位向量812。可将保持位向量的数据结构保持于单个文件内,或可将其保持于多个文件内。
在一些实施例中,地图标头800经布置成含有指示以下各项的进一步信息:
·等级的最大数目
·最短邻居列表的长度。
·最长邻居列表的长度。
·含有所有邻居列表的区段的字节偏移。
保持信息的文件或每一文件可具有用以编码邻居列表的区段。首先编码所有列表的大小。相对于最短列表长度、在由BitsRequired(所需位)(最长列表长度-最短列表长度(longestListLength-shortestListLength))确定的固定数目个位上编码每一列表长度。注意,如果所有列表具有相同长度,那么不需要位来编码所述长度。
接着编码所有列表的内容。每一列表由邻居区ID的若干元组构成:等级0处的对、等级2处的3元素元组,等等。
注意,不编码始发区元组(ASCII文件中的在“:”之前的部分)。其为隐含的,因为所有区的列表以递升次序存储。举例来说,如果地图具有100×10×5的3个等级(等级0处的100个区、等级1处的10个区、等级2处的5个区),那么:
·在等级0处,存储始发区1、2、3、...、100的列表(以此次序的100个列表)。这些列表中的每一者含有若干对。
·在等级1处,存储始发区1.1、1.2、1.3、...、1.10、2.1、2.2、...、2.10、3.1、...、100.9、100.10的列表(以此次序的1000个列表)。这些列表中的每一者含有3元素元组。
·在等级2处:不存储任何东西,因为其为最后等级,所以不存在邻居。
将元组中的每一组成部分存储为n位。根据处于对应等级的区的数目确定每一等级的位的数目。所以,有可能随机存取列表。在3个等级100×10×5的情况下,编码元组a.b.c将针对a使用7个位(因为在等级0处存在100个区),针对b使用4个位(因为在等级1处存在10个区),且针对c使用3个位(因为在等级2处存在5个区)。
实例:假定100×10×5个区有如下分割:粗略等级0处的100个区、中间等级1处的10个区,及详细等级2处的5个区。
在等级0处的文件中,含有邻居列表的区段将含有:
·指示处于等级0的100个区的列表的长度的100个数目。根据BitsRequired(所需位)(longestListLength-shortestListLength(最长列表长度-最短列表长度))计算位的数目。每一数目是相对于所述级处的最短列表(最短列表存储在标头中)。
·接着为100个列表的内容(100对)。在7个位上编码每一对的第一元素(因为在等级0处存在100个区),且在4个位上编码每一对的第二元素(因为在等级1处存在10个区)。
在等级1处的文件中,含有邻居列表的区段将含有:
··100×10=1000个数目,其指示等级1处的1000个区的列表的长度。
··接着为1000个列表的内容(1000个3元素元组)。在7个位上编码每一元组的第一元素(因为在等级0处存在100个区),在4个位上编码每一元组的第二元素(因为在每一等级0区中存在10个等级1区),且在3个位上编码每一元组的第三元素(因为在每一等级1区中存在5个等级2区)。
在等级2处的文件中,不需要存储任何内容,因为其为最后等级。
对于编码器输入文件,可采用任一形式的列表。
因此,一旦已执行分割为三个等级,就将每一节点指派给每等级一个区;即三个区。
标头800
通常,用于本发明的实施例中的标头为较小的,且因而,不需要为了减小其大小而使所述大小优化。通常,为了方便起见,全部内容均为字节对准或字对准的:
·(4个字节)编码版本(每次地图格式改变时会增加)
·(4个字节)地图旗标(用以开启或关闭特征,最初为0,但以后在需要添加任选特征的情况下可被使用)
·(4个字节)地图中的节点的总数目
·(4个字节)地图中的道路段的总数目
·(4个字节)区段霍夫曼树的字节偏移
·(4个字节)区段区二进制大型对象(blob)的字节偏移
·(4个字节)区段区页信息的字节偏移
·(4个字节)区段位向量页信息的字节偏移
·(4个字节)区段可变大小记录的字节偏移
·(4个字节)最大位向量(arp旗标)页(以位计)(可由路线规划方法用以在启动时预分配位流解码器的较坏情况)
·(4个字节)平均位向量(arp旗标)页大小(以位计)(用以内插位向量页位置)
·(4个字节)最小位向量(arp旗标)页增量(用以使得所有增量>=0,从而避免存储位正负号)
·(2个字节)位向量(arp旗标)历史的最大大小(可由路线规划方法用以在启动时预分配历史缓冲器)
·(2个字节)每页的道路段的最大数目(当前未使用)
·(1个字节)此文件的阿波罗(Apollo)等级
·(1个字节)每位向量(arp旗标)的位
·(1个字节)每位向量(arp旗标)页增量的位(位向量(arp旗标)页的固定大小记录中的字段)
·(1个字节)每二进制大型对象索引的位(区页信息的固定大小记录中的字段)
·(1个字节)每区计数的位(区页信息的固定大小记录中的字段)
·(1个字节)每非平凡(trivial)位向量(arp旗标)块的位
·(1个字节)区节点页大小的log_2()
·(1个字节)位向量(arp旗标)页大小的log_2()
·(1个字节)用以编码本地区ID的霍夫曼树的数目
·(1个字节)用以编码位向量(arp旗标)历史代码的霍夫曼树的数目
霍夫曼树802
·用来编码在每一节点周围的道路段的数目的霍夫曼树:极小的,仅大约10个码,仅存在于等级0处的文件中)
·用来存储非平凡位向量(arp旗标)的块的霍夫曼树:最大霍夫曼树,对于压缩来说,越大越好,但在路线规划方法中所需的存储器越多(在地图压缩与路线规划方法中的存储器使用之间的折衷)。
·当历史大小为0时位向量(arp旗标)增量码的霍夫曼树:极小的,仅3个码
·当历史大小为1时位向量(arp旗标)增量码的霍夫曼树:极小的,仅4个码
·当历史大小>=n时位向量(arp旗标)增量码的霍夫曼树:极小的(存储在标头中的霍夫曼树的数目)
·当在区页中存在3个区时区ID的霍夫曼树:极小的,仅3个码
·当在区页中存在4个区时区ID的霍夫曼树:极小的,仅4个码
·当在区页中存在>=n个区时区ID的霍夫曼树:极小的(存储在标头中的霍夫曼树的数目)。
区重新映射表804及区ID列表806
虽然区ID806比图11的文件格式的其它部分小,但还可压缩区ID806,如图14中示范。其中,可使用地理相关以便减少所使用的数据量。
每一区页在所述区页中存储相异区的列表。在大多数情况下预期此列表为较小的(事实上,许多页很可能仅含有1个至少在等级0的区)。区的列表具有可变大小。应可随机地存取页内的数据(即,随机存取)且因而,使用固定表大小以允许此情况。
将相异区的每一列表按每一区中的节点的频率排序:列表的第一元素对应于所述页中具有最大数目个节点的区,列表的最后元素为所述页中具有最小数目个节点的区。
对于区页中的每一节点,可使用本地区ID(对页来说为本地的)来编码其区ID。此本地ID为页中的区的索引(其为较小的整数,常常为0,因为0对应于区页中的最普遍的区)。
将节点的区ID存储如下:
·含有区ID的区阵列存储页中的区的所有可能的重叠列表。区的列表为所述阵列中的连续区ID。列表可(且确实)重叠。所述阵列不存储每一列表的开始及结束(此由区页信息表进行)。
·区页信息表为固定大小的记录表(因此可随机存取),且每一记录含有在列表的开始的阵列中的索引+所述列表中的项目的数目。
·每一节点含有本地节点ID(相对于其页来说为本地的)。
在下文中进一步界定这些概念中的每一者。
区阵列
区阵列编码页的所有可能的区列表。区阵列为区ID的简单阵列,其中区ID的列表可重叠。区阵列的大小应为较小的,因为列表重叠。在区段区页信息中进一步描述所述区阵列。
区页信息
使用区页信息表的固定大小记录中的2个字段指定区页表中的区ID的列表:
·区计数(此页中的区的数目,预期为较小的)。
·向区列表的阵列中的偏移(区的列表开始之处)。
在一个实施例中,此在图12中描述。
偏移字段指向区阵列中:(例如)在假定在每一等级中总是存在小于256个区的情况下(其为合理假定),每区ID具有1字节的固定大小记录是足够的(但如果每等级256个位被认为太有限制性,那么使得每个区ID大于8个位为易于实现的)。区页表记录中的区计数指示在指定偏移处在阵列中有多少区要被考虑。
如果若干区具有相同列表,那么其可指向相同所在地,其应为紧凑的,因为可预期许多页共享相同列表或共享所述相同列表的部分。
参考图12来更详细解释此,图12展示具有2^nr个节点((例如)nr=9以将512个节点分组在一起)的页的实施例。
注意区ID的阵列900紧凑的程度,因为若干页可指向阵列中的同一所在地或重叠的所在地(图中所标记的区二进制大型对象)。事实上,增加页的数目可能不增加阵列的大小,因为每一页接着在较少的区上重叠,所以组合的可能性减小。所以此阵列应允许创建许多页,而无需太多地图空间,也无需所产生的地图数据被加载于其中的装置上的过多存储器。
所述方法旨在使含有区ID的列表的阵列900尽可能地小。所述方法旨在在阵列中尽可能经常地重新使用相同的区ID列表。所述方法可自由地将列表的最后2个元素重新排序,因为其不会影响霍夫曼码的大小。
举例来说,当列表含有2个区10及34时,存储列表10、34或34、10(与频率无关)为等效的,因为当仅存在2个节点时,霍夫曼树在所有情况下仅使用1个位。换句话说,对于最后2个区来说,放松了根据频率排序的要求。类似地,还可将3个元素10、34、40的列表存储为10、40、34,因为仅第一个码10(最频繁的)将使用1个位,且其它码40及34均使用2个位(与次序无关)。
因此,查看图12,可看出,阵列900存储两个值:长度及从区数据的开始的偏移。因此,以第一行(3:0)为例,此指代从文件的开始偏移了0的三条数据(即,10、34、40)。作为另一实例,阵列条目(1:2)指代单个区(即,长度为1),其中从文件的开始的偏移为二;(即,区40)。
在替代实施例中,根据以下方法来编码区页信息:
此区段编码每一区中的子区的数目。子区的数目可在每等级中可变。然而,每一等级的子区的数目常常为恒定的。相对于每一等级处的区的最小数目且使用log_2(max_number_of_regions-min_number_of_region(区的最大数目-区的最小数目))个位来编码子区的数目。所以如果区的数目为恒定的,那么将0个位用以编码区计数,且此区段为空的。区的最小数目及最大数目存储在侧文件的标头中。
区邻居区段(关于图6及6a来论述邻域)的编码
此区段针对在给定等级L处的每一区层级而编码在更详细等级L+1处的区邻居的列表。举例来说,等级L=1处的区3.9可具有以下在等级L=2处的邻居的列表:3.5.43.6.33.6.44.7.14.7.3。如别处所论述,可使用邻居的列表来增加用以产生所述侧文件或每一侧文件的预处理的速度。
此区段被***成2个子区段:
·用以编码所有邻居列表(与在给定等级处存在的区数目一样多)的长度的子区段。相对于最短列表来编码所述长度,且接着,将位的数目计算为log_2(length_longest_list-length_shortest_list(最长列表长度-最短列表长度))。如果所有列表具有相同长度,那么使用0个位来编码长度(且因此,区段就为空的)。
·用以编码所有邻居列表(与在给定等级处存在的区数目一样多)的子区段。
区ID重新映射表的编码
仅在等级0的侧文件中编码此区段。所述编码编码二维表,所述二维表被用以重新排序且聚结等级0处的每一区中的位(以便高效地编码位向量,在本文献中在下文进一步描述聚结及位重新排序)。进行对位向量中的位的重新排序及聚结以优化对位向量的霍夫曼编码。此表由路线规划方法用以在知晓以下各项时找到位向量中的要解码的位位置:
·当前节点的始发区ID
·原始的到达位(to-bit)索引(即,在解聚结位向量位之后的位索引)
二维表的2个索引为:
·始发区ID
·目的地位索引(目的地的区)
此区段由2个子区段构成:
·用以编码等级0处的每一区的经聚结位的数目的区段。用以编码每一数目的位数目为log_2(max_number_of_coalesed_bits(经聚结位的最大数目))
·用以编码位重新映射表的区段。因为在进行路线选择时,目的地位元不改变(在进行路线选择时目的地保持相同),但始发区ID改变(视在进行路线选择时所探索的节点而定),矩阵按目的地位的行进行存储。在每一行中,存储每一始发区的位重新排序数目。路线规划方法在进行路线选择时应通常仅将对应于给定路线选择目的地的1行加载于存储器中。路线规划方法不需要将整个二维矩阵存储在存储器中。路线规划方法可随机存取所述行。将用以编码每一重新映射条目的位数目计算为log_2(经聚结位的最大数目)。
图13针对等级0区(见图9)扩展了图11中所展示的文件的位向量区段812。可看出,每一页包含道路段计数、区ID及位向量。
图14针对除了等级0之外的等级扩展了图11中所展示的文件的位向量区段812。可看出,对于其它区来说,存储位向量,且不存储道路段计数或区ID(针对等级0存储道路段计数或区ID)。
鉴于由每一等级的区覆盖的区域的差别,在每等级中每页的节点的数目可变化。举例来说,由于等级0内的区覆盖较大的区域,因此对于等级0,每区每页可能存在较多节点。举例来说,对于等级0,一些实施例每区每页可存储512个节点。因而,更详细等级可具有较小数目个节点-例如,256个节点、128个节点、64个节点、32个节点、16个节点或其类似者。实际上,某实施例可利用每页1024个节点、2048个节点或4096个节点。
位向量810、812的编码
表810含有固定大小的记录。始发节点ID被一起分组于具有2n个的页中。
将数据分组于具有多个连续节点的页中是方便的,因为预期位向量对于相同邻域中的若干道路段具有类似模式。通过使用页,有可能以增量编码若干道路段且实现良好压缩。类似地,有可能以增量将节点的区ID编码于页中。另一方面,这意味着存取一个道路段的数据需要将若干道路段的数据解封装(无直接随机存取)。可将必须将若干节点或道路段解封装以存取一个道路段或节点的数据认为是可接受的,因为:
·数据可被高速缓存,所以在存取一个道路段时读取的额外数据常常并非无用的。可能为以下情况:此额外数据不久之后将为有用的(这类似于磁盘高速缓存的预先读取(read-ahead)参数)。
·当与迪科斯彻A*路线选择比较时,使用所述位向量的路线选择将扩展搜索的大小减小了一数量级。通过按页分组数据,仅地图的小部分仍需要解码(沿着实际路径的页)。
·归功于对区ID及位向量的增量压缩,其应显著减小经编码的数据大小。
·页减小索引的大小,因为如所描述,数据将存储在侧文件中。
表810内的每一记录含有一“增量”字段,其用以找出每一页的可变大小的开始的位置(相对于经内插位置的增量)。针对每一增量的位的数目存储在标头中。
为了存取区ID及位向量812,解码器可通过进行以下线性内插而计算开始页的估计偏移:
interpolated_offset(经内插—偏移)=from_node_id*avg_page_size(始发节点id*平均页大小)
其中avg_page_size为存储在标头中的以位计的平均页大小(可能在固定点中以改进精确性)。可接着将数据的偏移计算如下:
偏移=interpolated_offset+min_delta+delta(经内插—偏移+最小—增量+增量)
其中min_delta为所有页的所有增量字段的最小值(存储在标头中),且增量为存储在页中的无正负号字段。min_delta值确保所有增量字段为正值(不存储位正负号)。
经由先前所描述的位向量页信息的“增量”字段来存取可变大小的记录。
每一记录含有2n个节点的数据(始发节点的区ID及其在所有等级处的所附接道路段的位向量)。同一编索引方案因此将被用于所有等级。
可变大小记录存储:
·页码-针对整个页指示所述页内的节点是否为同一区的部分的码;
·在位向量页中的每一节点周围的道路段的数目(仅在等级0处存储,因为其对于所有等级将为相同的);
·页中的始发节点的区ID,每等级有一个ID(针对所有等级的信息存储在等级0处的文件中{{ap_0_*.dat)
·仅等级i处的在页中的节点周围(仅在具有>2个所附接道路段的节点周围)的道路段的位向量。此为数据的最大部分。
·在每一节点周围的道路段的数目的编码
对于位向量页中的2n个节点中的每一者来说,霍夫曼码编码在所述节点周围的道路段的数目。此信息并非具体到所有等级,且其仅存储在等级0处的文件中(ap_0_*.dat)。
知晓在节点周围的道路段的数目是用以解码位向量(见1000,图13)。此信息与已经存在于其它文件中的信息重复,但其使得更容易且快速地解码页中的位向量,而无须在别处查找所述信息;藉此大小方面的小增加提供性能的增加。
可变大小记录中的区ID的编码
在编码每一节点周围的道路段的数目1000(见编码布局)之后,即刻在可变大小记录中编码节点的区ID1002。为了执行使用在预处理中产生的位向量的路线选择,通常需要存取给定节点的所有等级处的区ID1002,所有等级的区ID被彼此靠近地存储在同一文件中,而不是被***于每等级的不同文件中。
具有2n个节点(例如,n=4)且具有3个阿波罗等级的位向量页因此将把节点ID存储如下:
节点#0:本地_区_id_等级_0本地_区_id_等级_1本地_区_id_等级_2
节点#1:本地_区_id_等级_0本地_区_id_等级_1本地_区_id_等级_2
节点#2:本地_区_id_等级_0本地_区_id_等级_1本地_区_id_等级_2
节点#15:本地_区_id_等级_0本地_区_id_等级_1本地_区_id_等级_2
另外:
·在具有1或2个所附接道路段的节点周围,不编码任何东西(即,对于存储0作为所附接道路段的数目的节点来说)。
·当在给定等级设定了页码中的位时,则知晓所有节点均处于所述级处的相同区ID中,且接着仅将所述级处的区ID编码一次(对于具有>=3个所附接道路段的第一节点)。用来编码区ID的位的数目为log_2(regionCount-1(区计数-1))。
·除了页中的区ID经编码的第一节点之外,在编码每一区ID之前还编码一位。此位指示区ID是否与处于同一等级的先前经编码的节点ID相同。当此位被设定时,无需编码所述区ID,因为其与所述级处的先前所编码者相同。当此位为0时,以log_2(regionCount-1)个位编码区ID。由于许多连续节点在同一区中,因此常常仅需要1个位来编码区ID。
对本地区索引的霍夫曼编码为高效的,因为:
·在每一区页中按频率将区分类(所以本地索引0比本地索引1更频繁,...)
·对于页中的每一数目个区存在相异的专门的霍夫曼树(对于页中的3个区存在1个霍夫曼,对于页中的4个区存在1个霍夫曼树,等等)。霍夫曼树为较小的,且因而有可能在不使用大量存储器的情况下存储若干个霍夫曼树。
·无论如何,至少在等级0处,具有3个区或3个区以上应为相当罕见的(但在其它等级处并不罕见)。
可变大小记录中的位向量的编码
每一可变大小记录含有在页中的页周围的所有道路段的位向量。仅在具有3个或3个以上所附接道路段(道路段)的节点周围编码位向量。对于具有1个或2个所附接道路段的节点来说,路线选择方法可将位向量值111...111)隐含地赋予所述节点。
不编码到达节点。
参看图10,应注意,可由两个节点指定一道路段;在所述道路段的每一末端处有一个节点。因此,当考虑方向时,在方向的开始处的节点可被称作from_node(始发节点),且在末端处的节点可被称作to_node(去往节点)。
在编码内使用关于位向量的各种性质以使得编码有效率:
·所述位向量中的许多位向量为000...000或111...111。
·对于位向量的其它值(即,非000...000或111...111),很可能存在重复且相同值将很可能被重复。
·并且,给定节点周围的所有位向量的“或”应为111...111。
将位向量编码为第一霍夫曼码及任选的其它霍夫曼码。第一霍夫曼码指示位向量是否为:
·针对平凡位向量000...000的码0
·针对平凡位向量111...111的码1
·码2,或用以指示在所述页中尚未遇到非平凡位向量。在此情况下且仅在此情况下,后接有其它霍夫曼码以编码新遇到的位向量。
·当位向量与在当前页中先前遇到的位向量相同时(忽略平凡位向量000...000及111...111),码>=2。此编码因此使用所述页中先前遇到的码的历史。所述码因而实际上按所有先前遇到的码的历史给出索引。
不同于此霍夫曼码,仅在于历史中未找到非平凡位向量的情况下,需要编码更多信息(码=2)。在此情况下,紧接在霍夫曼码==2之后,编码:
·否定位
·用以通过N个位的块编码n个区的位向量的若干霍夫曼码(N及n给出于地图标头中)。举例来说,使用11个位的块编码100个区(99位位向量)需要编码9个霍夫曼码(9×11=99)。
由于大多数位向量主要含有0或含有1,因此否定位指示所述位向量是否被存储为否定的。这使得能够在霍夫曼树中存储决大多数含有0的码(因此,改进块的霍夫曼编码)。仅在块的大小小于区的数目的情况下存在否定位,此为实际上在等级0处的情况,但在等级1或2处,可能在仅1个块中编码整个位向量,所以否定位为不需要的。
如果存在100个区;N=100(因此,99位的位向量),那么第一块编码针对目的地区1到11的位,第二块编码区12到22,等等。在第一块中,LSB(0x1)对应于目的地区1,下一位(0x2)对应于区2,下一位(0x4)对应于区3,等等。
对于使用历史的位向量来说,历史阵列的深度为页中的先前遇到的相异位向量的数目(不考虑平凡位向量000...000及111...111)。不管历史向量含有0个元素、1个元素、2个元素、3个元素等等,使用不同霍夫曼树。使所述霍夫曼树倍增为可接受的,因为所有霍夫曼树均较小,且因而不需要相当大的存储装置:
·当历史具有0个元素时,霍夫曼树具有3个码:针对000...000的0、针对111...111的1、针对新位向量的2。
·当历史具有1个元素时,霍夫曼树具有4个码:针对000...000的0、针对111...111的1、针对新位向量的2、针对与历史中的元素#0相同的位向量的3。
·当历史具有2个元素时,霍夫曼树具有5个码:针对000...000的0、针对111...111的1、针对新位向量的2、针对与历史中的元素#0相同的位向量的3、针对与历史中的元素#1相同的位向量的4。
·等等。
预期位向量页的大小较小(例如,2n个始发节点),所以预期霍夫曼树的数目较小。
然而,有可能将霍夫曼树的大小限于最大值:例如,每当历史含有H以上个元素时,就将使用单个霍夫曼树(值H存储在地图标头中)。
此编码仅编码每一页中的相异位向量+一些码。
在较大的索引页的情况下,所述编码在大小上较有效率,但代价是为了使用位向量来进行路线选择目的而减慢了解码(页中有更多位向量要解码)。
统计数据
此处为在按254个区(1等级)编码比荷卢经济联盟(Benelux)时的文件格式的详细统计数据。使用以下输入参数:
每位向量块的位数目:11
每位向量页的节点数目:2^4=16
每区页的节点数目:2^9=512
提供统计数据以在地图大小方面给出地图形式的概念,且基于一些实际数据说明地图格式的描述:
---全局统计计数器:
节点计数..........................................1598632
线路计数..........................................1598632(100.000%)
跳过具有1条线路的节点周围的线路...................220180(13.773%)
跳过具有2条线路的节点周围的线路...................727138(45.485%)
---等级=[0]处的统计数据:
地图计数器........................................87437736(100.000%)
经编码平凡arp旗标000...000........................1310914(31.651%)
经编码平凡arp旗标111...111........................913348(22.052%)
历史中的经编码arp旗标.............................362432(8.751%)
不在历史中的经编码arp旗标.........................607717(14.673%)
否定块............................................235171(5.678%)
地图大小(以位计)..................................87437736(100.000%)
全局标头..........................................496(0.001%)
霍夫曼树..........................................28808(0.033%)
区二进制大型对象..................................52664(0.060%)
区页信息..........................................56216(0.064%)
arp旗标页信息.....................................2497880(2.857%)
可变大小记录......................................84801672(96.985%)
节点周围的线路计数................................2847844(3.257%)
节点区ID..........................................2112451(2.416%)
arp旗标...........................................79841370(91.312%)
码平凡000...000...................................1689322(1.932%)
码平凡111...111...................................1826696(2.089%)
在历史中找到的码..................................1668053(1.908%)
未在历史中找到....................................74657299(85.383%)
未在历史中找到的码................................1463183(1.673%)
否定位............................................607717(0.695%)
块................................................72586399(83.015%)
所有大小以位计。总地图大小为87,437,736个位(10,929,717个字节)。
缩进反映了层级。可变大小记录信息为目前为止最大的一条信息(地图大小的96.975%)。在可变大小记录中,子项目(缩进的)给出更多细节。位向量为目前为止可变大小记录中要存储的最大的一条信息(91.312%)。且在位向量中,存储在历史中尚未遇到的非平凡位向量构成了地图的最大部分(83.015%)。
关于霍夫曼树的统计数据
此节给出在按255个区(即,针对上文所展示的地图数据)编码比荷卢经济联盟时的霍夫曼树的统计数据。
在每一节点周围的道路段的数目的霍夫曼树---[霍夫曼树:Nr个线路]---
大多数节点具有3个所附接的道路段,但在所述霍夫曼树中的第2及第3位置中,发现具有2个及1个所附接道路段的节点(其并非决策节点)。
非平凡位向量块的霍夫曼树
此为最大的霍夫曼树,因为平凡位向量的存储块为目前为止最大的地图大小贡献因素(在比荷卢经济联盟255区的实例中,为83.015%)。
---[霍夫曼树:NonTrivialArpFlagBlock(非平凡Arp旗标块)]---
---裁剪,过大---
存储全部由0构成的块为最频繁模式,且根据上文的霍夫曼树以仅1个位来编码(这意味着即使平凡位向量000...000不按块编码,50%或50%以上的块还编码值0)。这是因为大多数非平凡位向量含有
·大部分0(及少数1)
·或大部分1(及少数0)
所述编码方案否定(~)含有大部分1的位向量,所以最后,位向量的编码块大部分情况下仅以1位编码含有000...000的块。次频繁的块为仅设定1位的块(1、2、4、8、16、32、64...)。其具有或多或少相同的频率,因此具有相同(或几乎相同)数目个位。
本地区ID的霍夫曼树
由于将区的列表按频率存储在每一页中,因此可看到,与其它所在地的区ID相比,存储本地区ID0占用较少位(事实上仅1位)。不同霍夫曼树对应于具有3个区、4个区、5个区等等的页。
---[霍夫曼树:区_0]---
位:1值:0码0
位:2值:1码10
位:2值:2码11
---[霍夫曼树:区_1]---
---[霍夫曼树:区_2]---
---[霍夫曼树:区_3]---
...裁剪...
位向量历史码的霍夫曼树
码0(表示平凡位向量000...000)为最频繁的(且在大多数情况下,仅以1位编码)。码1(平凡位向量111...111)就为次频繁的(且仅以1位编码)。再次频繁的码(2)是针对按块编码的非平凡位向量。其它码(>2)针对在历史中找到的位向量。
---[霍夫曼树:Arp旗标_0]---
位:1值:0码0
位:2值:1码10
位:2值:2码11
---[霍夫曼树:Arp旗标_1]------
---[霍夫曼树:Arp旗标_2]---
---[霍夫曼树:Arp旗标_3]---
---[霍夫曼树:Arp旗标_4]---
---[霍夫曼树:Arp旗标_5]---
...裁剪...
输入参数对地图大小的影响
存在若干输入参数,其控制图11中所展示的文件格式且可影响地图大小。对所述参数的调整可为地图大小与存储器使用或解压缩速度(视参数而定)之间的折衷。
本发明的实施例可使用以下输入参数:
·区页大小
·位向量页大小
·位向量块大小
·位向量霍夫曼编解码器计数
·区霍夫曼编解码器计数
位向量块大小的影响
增加位向量的霍夫曼块大小会改进地图压缩。块大小越高,压缩越好。但增加块大小是以需要更多存储器来存储具有2^n个值的较大霍夫曼树为代价的。上文的表说明此情况。
当引入优化以重新映射每源区的区ID时,预期此参数的影响变得更重大:在使用较大的位向量块大小时,此优化将有希望导致显著的地图大小减小。
位向量页大小的影响
增加页大小有助于更好地压缩地图。但遗憾的是,较大的页使路线选择方法对文件格式中的数据的解压缩减缓,因为存取随机道路段的位向量需要解码页中的所有道路段。上文的表说明此情况。
位向量霍夫曼编解码器计数的影响
增加位向量霍夫曼编解码器的数目有助于稍微增加压缩,且在上文的表中说明此情况。增加所述值几乎不存在缺点,因为无论如何所述霍夫曼树为较小的。增加到超过9个霍夫曼树(默认值)不提供任何显著改进。在位向量页较大的情况下,增加此参数可能更有效。
聚结及重新排序位向量中的位
位向量具有模式。每一源区(即,存储位向量的节点的区)的所述模式显著不同。可通过存储每一源区的小的转译表来减少用以存储N位的位向量的位数目。这些表执行2个功能,其进一步描述于此节中:
·位聚结
·位重新排序
可直观地将此想法理解如下:当在西班牙时,清楚的是,通向瑞典的道路段(针对目的地区瑞典的位=1)极可能还通向挪威(即,针对目的地挪威的位于是也为1)。如果另一道路段不通向瑞典(位=0),那么在大多数情况下其也不通向挪威。所以当在西班牙时,目的地区瑞典及挪威的位向量位的值几乎总是相等。事实上,对于许多目的地区来说,其甚至总是严格地相等。哪些位与哪一位充分相关很大程度上取决于始发区。
举例来说,当在芬兰时,目的地区挪威及瑞典的位的相关性小得多。另一方面,在芬兰,目的地区西班牙及葡萄牙的位很可能100%相关(或至少极接近100%)。
位聚结利用了一些位总是相等(完全相关)的性质。所述位可聚结成单个位。聚结位减少了在每一区中要编码的位数目。
位重新排序利用了一些位的相关性相当高(但并非100%相关)的性质,以便以优化对位向量的霍夫曼编码(及/或减小霍夫曼树的大小)的方式混洗(shuffle)位。
在计算用以聚结位及将位重新排序的表之前,计算所有始发区中的所有位对的相关性。相异对的数目为:
C(N,2)=N!/(2!*(N-2)!)=N*(N-1)/2
…其中N为区的数目。因此当区的数目较高时,此数目相当高。计算所有位相关性为产生图11中所展示的文件格式的方法的最慢部分。所述方法的复杂性为n*N*N,其中n为位向量的数目,且N为区的数目。对于每一区中的每一位对(即,位向量中的相异列的对),计算三维表:
位相关性[始发区Id][位I][位J]。
表中的每一条目含有4个字段的结构,其计数:
·始发区Id的所有位向量中位I=0且位J=0的次数
·始发区Id的所有位向量中位I=0且位J=1的次数
·始发区Id的所有位向量中位I=1且位J=0的次数
·始发区Id的所有位向量中位I=1且位J=1的次数
虽然在处理器时间方面计算成本高昂(且因此缓慢),但可易于将此过程并行化,因为计算每一始发区的位相关性完全独立于其它始发区。
本发明的实施例使用多执行线程以加速所有位的相关性的计算以高效地使用SMP(对称多重处理)机器。在一个***中,单CPU机器计算具有300个区的比荷卢经济联盟的位相关性花费约8分钟。但并行关系(parallelism)很好地按比例调整,且在启用线程且使用4个CPU时,计算位相关性就花费2分钟(为原来的4分之一)。
位聚结
当若干位完全相关(即,总是全部为0或全部为1)时,可在不释放任何信息的情况下将其聚结成仅1个位。将在给定区中的完全相关的位集合称为“群组”,那么给定区的位向量由若干群组构成。如果N位的位向量由n个群组构成,那么编码N位的位向量使用n个位+较小的表来指示每一区中的哪些位为相等的。
此位聚结具有由此产生的文件的大小以无损失方式减小的优点。此优点很可能随着区的数目增加而增加,因为更多位可能被聚结。所以地图大小随着区的数目以次线性方式增加。
在一个实施例中,获得以下数据:
最小群组数目平均群组数目最大群组数目
比荷卢经济联盟的255个区1284152
比荷卢经济联盟的300个区1390.017163
因而,在具有255个区的比荷卢经济联盟的实例中,存在至少1个甚至在霍夫曼编码之前也仅具有12个群组(即,仅需要12个位来编码其255位的位向量(即,位向量的长度与区的数目相同))的区(且因此,在霍夫曼编码之后具有甚至更少群组)。
平均来说,对于比荷卢经济联盟的255个区,区需要84个位。在此实例中,最差的区在霍夫曼编码之前需要152个位(152个群组)。
作为另一实例,且以上述255个区的比荷卢经济联盟的实例中的区Id=3为例,其具有从经编码数据取得的以下18个群组。
区Id=[3]具有[18]个群组:
#1(0)
#1(1)
#2(2)
#141(34578111215161920212223242526272829303132333637383940424344454650515960626366676971727374:757680818283848688899095969798100101102103104105106108110112113119120123127129130133135136139142143147148:149150151154155156157159160165166167171172173174176177178179181182183190192200203205207210211212213214215218:219220221222226227229235237241242243244245247249250252)
#1(6)
#1(9)
#1(10)
#30(131435484957688593109115117118128131134138153158164168169187189195209217224238239)
#59(17184753545665919299107114116121124125126132137140141144145146152161162163170175180184185186191193194:196198199201202204206208216223225228230231232233234236240246248251)
#1(34)
#5(417879111197)
#3(527787)
#1(55)
#3(586194)
#1(64)
#1(70)
#1(122)
#1(188)
每一道路段表示一群组(区Id=3的18个群组)。括号中的数目为在每一群组中被聚结的位索引。#之后的数字为每一群组中的位数目。
在此实例中,1个群组为极大的且含有多达141个区。这是寻常的。一般来说,与地图的中间的区相比,地图的边缘上的区聚结更多位。
在此实例中,位的数目已平均减小为原来的~1/3(~=255/84)。当然,这并不意味着地图大小减小为原来的1/3,因为要编码的剩余位比原始位具有更多熵(所以更难以通过霍夫曼块来编码)。但位聚结位仍可减小地图大小(可能显著地减小地图大小)。
当聚结每一区中的位时,每一区中的位向量因此具有不同数目个位(但给定始发区的位向量具有相同数目个位),如图15中所说明。阴影说明每一位向量的始发区ID。
一旦已计算出表的位相关性(bitCorrelation),识别完全相关位的群组就相当容易且快速。在其中找不到01或10模式的所有位对为完全相关的,且可聚结成1位。
为了给出位聚结的另一实例,下表给出6个位向量(每一位向量具有15个位)的实例。这些位向量尚未被聚结。
100111101111100
000001101110100
011001010010111
111110010001011
011000010000011
000000101100000
这些15位的位向量可聚结成仅4个群组-因此,在霍夫曼编码之前每位向量有4个位。这展示于下表中:
所述表的右边部分的标题展示所述表的左边部分中的哪些位构成4位聚结向量。为了清楚起见,4位聚结向量的第一位表示左边部分的第1、第3及第9列。因而,由于在上述实例中左边部分(即,15位原始向量)的第1、第3及第9位总是相同,因此其可由上表的右边侧的第一列表示。
因此,总之,左边侧与右边侧之间的一致性的表为如下:
原始位 |
聚结位 |
0 |
0 |
1 |
1 |
2 |
1 |
3 |
0 |
4 |
0 |
5 |
3 |
6 |
2 |
7 |
1 |
8 |
2 |
9 |
2 |
10 |
3 |
11 |
0 |
12 |
3 |
13 |
1 |
14 |
1 |
聚结位有效地将附近目的地区及在从始发区的相同角度扇区中的目的地区分组,如图16中所说明。
图16中的阴影指示被聚结在一起的区的群组。2个图(即,图16a及16b)展示从2个不同始发区:A及B的观点聚结的相同区。哪些区被聚结在一起取决于始发节点的区ID,如由所述图所展示。在此图中,8个区被聚结成4个群组。从这些图中的始发区A或始发区B的观点来看,聚结位不同。注意垂直条状区(1300)如何被聚结,因为当从始发区A看时,其处于同一方向上。
图17中进一步示范此情况,图17说明聚结位将附近目的地区及从每一始发区的观点来看在+/-相同角度扇区中的目的地区分组。
在聚结位之后,每一区的位向量的要编码的位的数目不同。在(例如)比荷卢经济联盟的255个区的情况下,每一区的位向量的位数目为:
始发区->聚结位
1->57
2->93
3->18
4->12
5->63
6->75
...裁剪...
251->21
252->46
253->117
254->80
所述方法为准确的(其并非试误式的)。因此,所述方法找到位的群组的理想数目。
在一些实施例中,以无损失方式实施聚结位:仅当区总是具有相同位时才聚结所述区。但在其它实施例中,这可扩展为使得聚结位有损失;即,使得完全恢复原始数据为不可能的。此些有损失实施例可引入阈值:如果一对位的差异小于X倍,那么在位向量中的一些位向量中用1替换一个或一个以上0允许所述位向量被聚结的情况下,可聚结所述位。
此有损失聚结的实例将为使0000001100与0000001110聚结。此方法的优点为,数据被更好地压缩,但缺点为,使用所述位向量的路线选择方法将评估其它道路段,因为额外的1将指示道路段为最快速路线的部分。
在无损失聚结的情况下,阈值为0。增加所述阈值将允许聚结其它区,而代价是将少数几个位1引入位向量中。但如果阈值被保持为低的,那么其将对可使用所述数据格式执行路线选择的速度几乎没有影响。举例来说,如果在数千个位向量中2个位几乎总是相同(除了(例如)仅1个位向量之外),那么变更此唯一位向量的不同处以使得有可能聚结更多位可能是可接受的。阈值越高,可预期越多地图压缩。
位重新排序
在一些实施例中,一旦位已被聚结(如上文所描述),就可将位重新排序。将位重新排序并不(在霍夫曼编码之前)减少要编码的位的数目,而是有助于使得霍夫曼编码更有效率,从而减小地图大小,且还可有助于减小位向量霍夫曼码中的相异码的数目,从而降低霍夫曼树的存储器要求。
与位聚结不同,位重新排序为试误式方法,所以其可找到一种较好的重新排序,但其未必可找到最佳的重新排序。
按块来编码位向量。块大小为可定制的,且存储在地图标头800中。在下文给出的解释中,且作为实例,将块大小设定为11个位。位向量中的位的数目可能不可被11除尽,所以最后的块可能小于11个位。最后的块使用与具有11个位的完整块所使用的霍夫曼树不同的霍夫曼树。编码每一位向量因此编码:
·使用针对11位块(在此实例中)的霍夫曼码的若干完整块
·当剩余的位小于11个时可使用另一霍夫曼码的最后1个块。
以下图片描绘要按块进行霍夫曼编码的位,其中位向量在2个区(其在聚结之后具有不同数目个位)中:
<----完整块----><----完整块---><-最后一个块->+=====================+=====================+---------------+|...........|...........|xxxxxxxx|+=====================+=====================+---------------+|...........|...........|xxxxxxxx|+=====================+=====================+---------------+|...........|...........|xxxxxxxx|+=====================+=====================+---------------+|...........|...........|xxxxxxxx|+=====================+=====================+---------------+|...........|...........|xxxxxxxx|+=====================+=====================+===============+=====+-----+|...........|...........|...........|xxx|+=====================+=====================+=====================+-----+|...........|...........|...........|xxx|+=====================+=====================+=====================+-----+|...........|...........|...........|xxx|+=====================+=====================+=====================+-----+|...........|...........|...........|xxx|+=====================+=====================+=====================+-----+<----完整块----><----完整块---><----完整块---->
每一区均具有霍夫曼树将很可能在存储器方面成本过于高昂。所以在一些实施例中,所有区共享同一霍夫曼树。由于在每一区中相关位为不同的,因此将每一区中的位重新排序以使得在所有区中相关位被***地放置于相同位置处是有利可图的。所以跨越所有区共享霍夫曼树变得更有效率。
将用来将每一区的位重新排序的表存储在地图数据中。注意,无需编码单独的用以使位聚结的表及用以将位重新排序的表,而是可改为仅编码1个表,其为两种变换(聚结+重新排序)的合成物。
将完整块中的位重新排序的方法如下进行:对于每一区,找到最相关的位对。由于完全相关的位已被聚结,因此剩余位均为不完全相关的。然而,一些位对比其它位对相关得多。在第一完整块中,将最相关的位对(a,b)重新映射到位#0及#1:
+=====================+=====================+=====================+-----+|ab.........|...........|...........|xxx|+=====================+=====================+=====================+-----+
由于分组最相关的位对,因此完整块的霍夫曼树具有较少相异码(此具有使用较少存储器来存储数据的优点),且统计数据为较偏斜的(使得霍夫曼编码更有效率)。在绝大多数情况下,前2个位(例如)含有00或11,但几乎从来不含有10或01(其它位也是如此),而不是含有位的随机序列。在未将位重新排序的情况下,前2个位将含有所有种类的模式00、01、10、11。
在将前2个位重新映射之后,方法接着找出下一最相关的(c,d)位对,且重新映射其以将其存储在第二块的前2个位中:
+=====================+=======================+=====================+-----+|ab.........|cd.........|...........|xxx|+=====================+=====================+=====================+-----+
接着,方法再一次找出下一最相关的(e,f)位对,且重新映射其以将其存储在第三块的前2个位中:
+=====================+=====================+=====================+-----+|ab.........|cd.........|ef.........|xxx|+=====================+=====================+=====================+-----+
当到达最后的完整块时,所述方法返回到第一个完整块且重新映射下一最相关的位对(g,h)。如果若干对具有相同相关性,那么连结断路器(tiebreaker)选择与同一块中的前一对最相关的对(即,与(a,b)最相关的对):
+=====================+=====================+=====================+-----+|abgh.......|cd.........|ef.........|xxx|+=====================+=====================+=====================+-----+算法方法如上述继续进行,直到完整块中的所有位对均已被重新映射为止:
+=====================+=====================+=====================+-----+|abghmnstyz.|cdijopuvAB.|efklqrwxCD.|xxx|+=====================+=====================+=======================+-----+
在此实例中,由于块大小具有奇数个位(11个位),因此每一完整块中仍存在未经重新映射的位。所述方法接着找出与“z”最相关的位,且将其存储在第一块中。接着找出与B最相关的位且将其存储在第二块中,等等,直到所有完整块均被重新映射为止:
+=====================+=====================+=====================+-----+|abghmnstyzE|cdijopuvABF|efklqrwxCDG|xxx|+=====================+=====================+=====================+-----+
此时,完整块中的所有位被重新映射。所述方法接着重新映射最后的块中的位,试图分组最相关的位对(如针对完整块所进行)。将最后的块中的位重新排序可有助于减小地图大小,但其并不像将完整块中的位重新排序一样有帮助,这是由于2个原因:
·完整块为更重要的。在此实例中,每一码对于完整块使用3个霍夫曼码,而其对于最后的块仅使用1个霍夫曼码,所以完整块比最后的不完全的最后块对总地图大小的贡献更大是正常的,且优化完整块的霍夫曼编码为更有用的。
·由于已经挑选完整块中的所有最相关的位来重新映射其,因此最后块中剩下的待重新映射的位为较不相关的。所以最后块中的位的熵因此高于完整块中的位的熵。换句话说,最后块的霍夫曼编码不如完整块的霍夫曼编码有效率。
+=====================+=====================+=====================+-------+|abghmnstyzE|cdijopuvABF|efklqrwxCDG|HIJ|+=====================+=====================+=====================+-----+
应记住,对于所有区的所有完整块使用同一霍夫曼树。在上述实例中编码位向量因此以相同霍夫曼码编码所有完整块,且最后以不同霍夫曼编解码器编码最后的块:
+=====================+|abghmnstyzE|+====================+|cdijopuvABF|(使用同一霍夫曼编解码器的3个完整块)+=====================+|efklqrwxCDG|+=====================++-----+|HIJ|(使用另一霍夫曼编解码器的1个最后块)+-----+
当看到上述图时,所述方法重新映射每一块的第一位(而不是在跳到第二块之前重新映射第一块中的所有位)的原因应更清楚。由于针对所有完整块使用同一编解码器,因此需要使所有块的所***尽可能相同。如果将重新映射第一块中的所有位,接着重新映射第二块中的所有位(等等),那么每一块将具有十分不同的模式:第一块将具有最相关的位,第二块将具有较不相关的位,第三块将具有更不相关的位,等等。将有可能为完整块的每一列创建若干霍夫曼编解码器,但相信所述做法在存储器方面成本过于高昂。目前为止所概述的方法在使所有完整块共享同一霍夫曼编解码器的同时运作良好。
可能的其它优化
页的页
位向量页信息存储增量字段,其用以找出每一位向量页的开始偏移。使用偏移的道路线性内插器(linearinterpolator)来存储增量字段。但所述偏移并非非常道路线性的,因为小节点ID(等级0,高速公路)周围的位向量比高节点ID(等级5,目的地道路)周围的位向量需要更多位。
位向量页信息的编码不像可能期望地一样有利,因为内插器不能精确地预测实际偏移。通过改进内插器,将有可能改进位向量页信息表的编码以使其更有效率。
本发明的一些实施例可使用具有2个等级而不是仅具有1个等级的位向量页(及可能地,区页)。可将用以分组数据的具有2n个节点的页(称其为子页)分组成具有2N个子页的页。
因而,将按页而不是全局地(在标头中)存储线性内插参数。举例来说,索引等级2可能早先将24=16个节点分组于子页中,且索引1可能将210=1023个所述子页分组于页中。接着针对1024*16=16K个节点而不是对全部节点计数(在西欧及中欧的地图中的40,000,000个节点)发生线性内插,所以对可变大小偏移的线性内插变得精确得多,且索引2中的增量字段因此较小。
在页较大的情况下,额外索引1的大小较小(小到足以装入存储器中)。能够装入装置的存储器内是有利的,因为其不应减缓使用所述数据的路线选择。可接着针对索引1表中的每一条目存储平均页大小,而不是将平均页大小存储在标头中。
交错位向量页
如上文所描述,页偏移的内插器为不精确的,因为重要道路(许多非平凡旗标)及次要道路(许多平凡旗标)的位向量是不同的。使内插器更线性的一种简单方式为使不同网络等级的页交错,且这可在本发明的实施例中使用。
以上实施例中所描述的文件存储以下页:
#0
#1
#2
#3
#4
#n-3
#n-2
#n-1
在可能更高效的其它实施例中,有可能以交错的方式存储如下:
#0
#n-1
#1
#n-2
#2
#n-3
#3
#n-4
为了存取页#x(例如由路线规划应用程序),通过加载页#x′来存取所述页,其中:
·x′=2*x(其中x为偶数)
·x′=2*(x-(n-1))(其中x为奇数)
此实施例应为有利的,因为其将使索引的大小每页减小若干个位。然而,数据可能对于高速缓存来说分组地较差,这可能减缓数据存取(在文件***高速缓冲存储器中较少命中)。
不存储所有节点的区ID
不需要存储无出口的路处的节点及具有2个所附接道路段的节点的区ID。对于路线选择来说,可忽略这些节点。进入这些节点中的一者可被变换成进入其邻居决策节点。
在页等级处及/或节点等级处存储额外信息
查看地图数据,存在许多仅含有平凡位向量000...000或111...111的位向量页。一些实施例可能针对每一页存储1位以标记所述页,那么存储所述页中的位向量可为更有效率的,因为对于每一位向量仅需要单个位来指示其为000...000还是111...111。这不仅将减小仅含有平凡位向量的页的大小,而且还将使具有非平凡位向量的页的位向量码的霍夫曼树得到更好的优化(因为所述码的频率将在百分比方面显著增加,所以用来指示非平凡向量的位数目将减小)。在较精细网络等级(例如,等级3)中,大多数页仅含有平凡位向量,所以在所述页的约一半页中可能每页仅存在1个位向量。
仅存储决策节点处的位向量
如上文所论述,一些实施例可能不存储具有1或2个所附接道路段的节点的位向量。然而,其它实施例可为更积极的,且将所述想法推广为仅存储决策节点周围的位向量。
引入决策节点及决策道路段的概念,因为其可在编码地图数据的过程中为有利的:不需要编码非决策道路段的位向量,如现在所论述。
·决策节点为其中存在用于路线选择的进入道路段的节点,使得存在离开所述节点(而不进行U形转弯)的多个选择。
·非决策节点是并非决策节点的节点。所以不管路线选择来自哪里,总是仅存在一条离开所述节点的道路。
·决策道路段为用以离开决策节点的合法的道路段。
·非决策道路段是并非决策道路段的道路段。
所有决策道路段s因此在决策节点周围。但并非在决策节点周围的所有道路段s均为决策道路段。在非决策节点周围的所有道路段为非决策道路段。
将仅编码决策道路段的位向量。非决策道路段的位向量为隐含的(000...000或111...111),因为使用所述数据的路线选择技术可根据已存在于道路段中的信息而作出确定。
如何确定节点是否为决策节点?可将准则缩减为:
isDecisionNode=(lineCount>=3)&&(lineGoingOutCount>=2)
其中:
lineCount:为附接到节点的线路的总数
忽略不可进行路线选择的线路类型(铁路、参考线路),
忽略在两个方向上封闭的线路且忽略禁止通行的道路(住宅区域)。
lineGoingOutCount:为附接到节点的可合法选取以离开所述节点的线路的数目。
选取一道路段以离开所述节点是否为合法是取决于道路段属性:
·道路段类型(铁路及参考道路段始终为非法的)
·道路的向前/向后流动(存储在道路段旗标中)
·道路段旗标中的禁止通行属性(禁止通行道路段不具有任何位向量)
在一些实施例中,忽略非决策道路段可丢弃约略40%的道路段。已发现,此百分比为相当一致的而与地图无关。避免编码40%的位向量为有利的,但其节省了小于40%的地图大小,因为其主要移除平凡位向量。
移除在具有小于3个所附接道路段的节点(虚拟节点)周围的位向量会移除非平凡位向量,所以针对此类别的非决策道路段的地图大小节省可比针对非决策道路段的地图大小节省大。另一方面,筛选需要解码器(例如,使用地图的路线选择方法)来解码道路段的道路段类型及道路段旗标,且对其应用逻辑以便弄清为隐含的位向量,这可减缓过程。
理论上,实施例还可查看机动(即,转弯限制)来决定离开的道路段是否为合法的,但此技术增加复杂性。忽略机动意味着实施例可能编码比严格必需的位向量多的位向量,但实现了方法的简化。
非决策节点的实例
a--<->--b--<->--c
在此实例中,(b)附接到可在两个方向上通行的2个道路段。(b)不是决策节点,因为存在<=2个所附接道路段。
所以将不编码离开节点(b)的两个道路段的位向量。解码器可隐含地将其设定成111111。
此实例中的箭头>展示合法的流动方向。(b)不是决策节点,因为仅存在一个出口。所以(b)周围的所有道路段均不需要位向量。
不编码离开节点(b)的道路段(b)->(c)的位向量,其将隐含地为111...111。也不编码离开(b)的非法道路段的位向量,其将隐含地为000..000。
决策节点的实例
(b)为决策节点,因为当来自(d)时,存在选择:路线选择可朝向(a)或朝向(c)继续。
注意,在此实例中,当来自(a)时,没有选择:路线选择仅可朝向(c)继续。但节点(b)仍为决策节点,因为存在当来自(d)时的至少一个个选择,所以应存储节点(b)周围的2个决策道路段的位向量。
存储道路段(b)->(a)及道路段(b)->(a)的位向量,因为其为决策道路段。
不存储道路段(b)->(d)的位向量,因为根据交通的向后/向前流动,选取此道路段为非法的。所述位向量隐含地为000...000。
对位向量进行“或”运算
假设节点具有3个所附接道路段,且前2个经解码的道路段具有以下位向量:
00000000000000000000
00000000000000000000
那么第三个位向量不需编码,因为其只能为:
11111111111111111111
这只能在节点周围的道路段的位向量碰巧呈此次序时起作用:所有位向量为000..000且最后一个位向量为111...111。实际上,看来此情况相当频繁地发生在较精细等级(例如,等级0)网络(其为大多数道路段所在之处)中。
将前2个位向量取为:
00000000000000000110
00000000000000000010
那么除了为未知的且需要以某种方式编码的2个位之外,第三位向量的所有位只能设定成1。
11111111111111111??1
由于在上述实例中,已经知晓大多数位,因此应可能使用此信息比编码整个位向量更有效率地编码所述2个未知位。因此,在此实例中,仅必需编码2个位。
使用此性质的可能的快速解码方案将为通过对道路段中的所有先前的位向量进行“或”运算来计算当前节点的道路段中的所有经解码的位向量的位掩码。在使用与早先的实例相同的实例的情况下,如果节点具有3个所附接道路段,且如果先前2个道路段具有以下位向量:
00000000000000000110
00000000000000000010
…那么“或”位掩码为:
00000000000000000110
将节点周围的要编码的第三个及最后的位向量取作:
11111111111111111001
只要满足以下条件,编码器可自由编码任何其它码(otherCode),而不是编码11111111111111111001的霍夫曼码(其可为罕见的):
待编码值=~位掩码|其它码
在此实例中,其它码=0000000000000*0000000符合要求,因为:
待编码值=11111111111111111001=~0000000000000*0000110|0000000000000*0000000
编码00000000000000000000比编码11111111111111111001有效率得多,因为00000000000000000000频繁得多。解码为快速的,因为解码仅需要每当其解码位向量时计算位掩码(“或”运算)且将所述位掩码应用于最后的经解码的位向量:
实际位向量=位掩码&经解码的位向量
=~00000000000000000110&00000000000000000000
=11111111111111111001
在节点周围的道路段经存储以使得在位向量中具有最多1的一个道路段处于末端区处的情况下,此优化运作良好。然而,这可证明为困难的:
·在计算位向量之前执行对节点周围的道路段的分类(除非由果及因地(aposteriori)使用位向量信息来重新编码)
·已经根据道路名称对道路段进行分类。有可能在道路名称被识别时对节点周围的道路段进行分类。
使用网络等级
在始发节点周围的道路段的位向量与网络等级之间应存在强相关:选择到另一区的路径将通常偏好选取粗略等级网络(1等级将通常为粗略等级网络,且0针对较精细等级网络)。
以下实例描绘具有处于不同网络等级的道路段的交叉点:
位模式很可能为如下:
21????????????
23????????????
34000000000000
不存储在较精细网络等级处的节点的位向量
除了在接近目的地或起点之处以外,路线选择几乎从不经过不重要的道路段网络等级(例如,网络等级5)。因此,有可能不存储等级5处的位向量,且因而,对路线选择路径选择的影响应最小(即使在等级5处的道路段的数目较大的情况下)。在大多数情况下,路线选择将仅探索少数在路线的开始或末端处的在最不重要的网络等级处的道路段,因为其将迅速地到达一些更重要的道路段网络等级,且关于所述节点的搜索加速数据将几乎总是告知选路器(router)跳过返回到最不重要的网络等级的导航段,并使用通向或继续停留在较重要的网络等级的导航段。这在最重要的网络等级处是成立的,因为在目的地仍然遥远时使用所述网络等级。
除了丢弃最不重要的道路段(例如,等级5)处的位向量之外,还可不编码所述网络处的区ID。
将位向量中的少数几个0变换成1
这也是有损压缩方案。
如果位向量仅含有仅一个0(或可能地,小于小阈值),那么在产生以下结果的情况下将其变换成1可为有可能的(即,将所述道路段设定为最快速路线的部分):
·平凡位向量111...111(因为以比编码非平凡位向量紧凑的方式来编码平凡位向量)
·或已在当前位向量页的历史中发现的位向量(因为所述位向量也被更高效地编码)
将位向量中的0变换成1并不影响路线选择结果,其仅会由于使路线选择考虑更多道路段(因为其现在被设定为最快速路线的部分)而使路线选择较慢。然而,本发明的一些实施例可使用此方法-尤其是在地图节省为较大的,同时在路线选择速度方面的性能影响(performancehit)较小的情况下。
路线选择
图18展示地图1600,其覆盖一区域且具有开始节点1602及目的地节点1604,以及已由现有技术A*搜索方法探索的多个道路段。由虚线1606展示选定路线。
图19展示地图1650,其与图18的地图覆盖相同的区域且还展示相同的开始节点1602及目的地节点1604。所述图还醒目提示使用本发明的实施例而探索的道路,其利用了与用以产生图18的路线相同的道路网络及相同的准则(例如,两者均乘汽车行进,希望将速度用作要最小化的成本函数,等等)。再次以虚线道路段1606展示由所述方法选定的路线,且应注意,所述道路段是与图18中所计算的线路相同。因而,应注意,通过本发明的实施例计算的路线可为所谓的数学上准确的,且可找到关于已被选择以最小化的给定成本模型的最好/最佳路线。因此,将明白,当与现有技术相比时,由本发明的实施例探索的道路段为显著较少的。因而,与现有技术A*方法相比,本发明的实施例的方法较迅速,且通常显著较迅速。
还应注意,随着路线1606逼近目的地1604,与开始相比,更多路线被探索;即,当路线1606前进超过点1652时,探索除了最低成本路线之外的道路。此情况的一种解释为,所述方法在点1652处已从等级0区切换到等级1区。应进一步看出,在目的地1604附近探索其它道路段。此外,可通过注意到路线规划方法将在此附近从等级1切换到等级2来解释此情况。
因此,当进行长程路线选择时,通常将仅存在一条最快速路线。然而,随着方法切换到较精细等级(例如,从等级0到1),可能存在被标记为“最低成本”且因此需要被探索的一条以上路线。
一旦地图数据已被创建且位向量被计算并存储,其就可用于计算两个点之间的路线。
图20展示通过路线规划应用程序探索网络的现有技术A*方法,其中在一节点处作出应进一步探索哪一道路段的决策。为了实现此,将行进到下一节点的成本添加到从所述下一节点移到目标的估计成本。接着进一步探索从给定节点起的具有最小成本的路径。所述方法保持随着所述方法的进行目前为止已招致的成本的总和,且在每次反复时考虑最小成本。
举例来说,在节点B处开始,可看出,节点C与D两者均与B(开始节点)相距2个成本单位。然而,从节点D起,到达节点F的估计成本为3个单位,且从节点C起,到达节点F的估计成本为5个单位。因此,所述A*方法将比探索到节点C的路线更为优先地探索到节点D的路线,因为对于到节点D的道路段来说,到下一节点的成本加到目标的估计成本较小(即,BC=2+5=7,而BD=2+3=5)。
当考虑使用本发明的实施例的最小成本位向量来执行路线规划时,每一道路段的位(即,图10的列704)识别哪些道路段是到目的地区的最小成本路径的部分的候选者。因而,将关于图20所描述的A*方法修改成图21中所展示的方法。
通常,使用位向量执行路线规划,如关于图21所描述。然而,本发明的一些实施例可允许在各种情况下使路线规划退回到A*(或其它现有技术方法)。不同实施例可利用以下各项中的任一者:位向量信息缺失(藉此允许***甚至在不存在位向量的情况下起作用);使用成本函数;除了针对其计算了位向量的成本函数之外的路线选择(通常最快速路线,但未必如此);用户指定了与用于预先计算位向量的准则不同的准则(例如,用户希望避免高速公路);交通工具类型不同于用于预先计算位向量的交通工具类型(例如,用户步行且不乘汽车);及路线低于阈值长度(例如,路线的起点及终点在同一区内)。
与图20相比,在图21上展示两个额外数字1800、1801。另外,在所述图上以虚线道路段1802及1804来表示各区。“1”1800指示道路段针对至少一个成本函数,BD是从节点B到目标节点所位于的区的一个最小成本路径的部分。“0”1801指示道路段BC不是从节点B到目标节点所位于的区的任何最小低成本路径的部分。
因而,当从节点A开始时,本发明的实施例将使用上文所概述的A*来从A起探索节点。然而,一旦已到达节点B,就无需进一步使用所述探索,因为存在仅道路段BD为最小成本路径的可能部分的明确标记。因而,已使用一旦A*方法且找到最小成本路径,就随后将通过查看位向量内的相关位来选择最小成本路径。
然而,如果在不同时间且/或针对不同成本函数在一对区之间存在不同的最小成本路径,那么最小成本数据可识别所述对区之间的一个以上最小成本路径。因此,开始节点与目标节点(起点与目的地)之间的路线选择可能找到一个以上最小成本路径,且必须在竞争的最小成本路径之间做出选择,例如在道路段BD的数字1800及道路段BC的数字1801均具有指示每一道路段在特定时间为最小成本路径的部分的值“1”的情况下。在此实施例中,位向量不识别每一道路段为最小成本路径的部分的时间。因此,路线选择算法基于成本函数以及行进于所述路径的段上的时间来实行对两个可能的最小成本路径的成本分析。可根据从起点/开始节点的出发时间来确定此时间,且成本函数系根据用户做出的选择来确定,例如,用户可能已从设定菜单(例如,图32所示的设定菜单)选择成本函数/准则,使得根据此选择来确定所有路线选择。举例来说,所述成本函数/准则可为以下各项中的一者或一者以上:最短距离;最短行进时间;代价最小(就环境影响来说);使用的汽油最少;产生的CO2最少,避开或偏好一个或一个以上特定道路类型或类别等。或者,用户可在请求规划所述特定路线时选择成本函数/准则。
本发明的一些实施例可允许电子地图的用户突出显示所述电子地图内的错误。明确地说,用户可能将道路段标记为阻塞(即,指示向量被阻塞),且这可具有与交通事故对交通流的影响相同的对交通流的影响。因而,可以与详述交通事故的数据相同的方式来考虑表示阻塞道路段的数据。
替代性或额外地,实施例可允许用户指示:道路已变得不阻塞、已创建新道路或其类似者,其中的任一者可被视为在电子地图内创建新向量。通常,因为通过预处理来产生路线选择加速数据(例如,如图10所示),所以利用路线选择加速数据的路线选择方法将不考虑此些新向量(因为路线选择加速数据将不参考所述新向量)。
用户可使用任何合适手段(例如,直接在PND上使用触摸屏或其它按钮、开关等或借助于声音指令)将校正输入到电子地图。
如上文所论述,用户(不论其是为特定导航装置的用户还是已通过例如MapShareTM等技术识别的另一用户)可能指示电子地图内存在新向量(即,先前并非电子地图的部分的向量)。然而,因为路线选择加速数据是通过预处理产生,所以在路线计算中将不考虑这些新向量。因而,允许将新向量添加到电子地图的本发明的实施例可修正路线选择加速数据以反映新向量为到地图的每一区的最低成本路线的部分(如路线选择加速数据所指示)。即,将设定所述或每一新向量的行,使得所述向量的所有位将被设定为“1”,其指示所述向量为到电子地图的每一区的最低成本路线的部分。所属领域的技术人员将了解,此并非实际情况,但也将了解,以此方式设定位将致使路线计算考虑新向量,例如,当产生起点位置与目的地位置之间的路线时。
速度概况与每一段相关联(如图10a中所展示),所述速度概况涉及行进经由所述段的预期速度如何随着时间而变化。根据这些速度概况,可确定在相关时间的预期速度,且这可用以确定在所述时间沿着所述道路段行进的成本。通过合计沿着每一最小成本路径的道路段行进的成本,可确定每一最小成本路径的成本。导航装置可接着将在所述时间具有最低成本的最小成本路线选择作为路线。
可在显示器206上显示所确定的路线。图23为如何可将路线显示于地图数据上的实例。
在此实施例中,显示器包含在路线的可导航段中的至少一些可导航段上的预期速度的指示。对于此实施例,这些指示为对路线的着色及在地图的图像的侧面的时间条2000以展示沿着所述路线的预期速度。举例来说,如果预期速度超过第一阈值,那么可将可导航段着色为第一颜色(例如,绿色),且如果预期速度低于第二阈值,那么可将可导航段着色为第二颜色(例如,红色)。
现在将参考图10a及24到图31而论述确定路线的替代方法。可确定表示针对成本函数中的一者随着时间而改变的成本的成本概况,而不是确定在特定时间路线的成本。在此实施例中,将每一可导航段的速度概况的多个值而不是单个值用以确定路线的成本概况。
举例来说,参看图21,每一路线的成本为成本如何随着时间而变化的分布,而不是具有每一道路段BC、CE等等的单个值。将这些成本分布求和以确定路线的成本概况。还在图10a中展示成本概况经由树的传播。
在此实施例中,每一可导航段具有与其相关联的速度概况,其对于每小时包含12个时间组(timebin),每一时间组含有在所述时间行进经由可导航段的预期速度。确定每一组的预期速度的成本,且将路线的可导航段的每一相关组的成本求和以确定成本概况。每一段的所求和的值可能并非来自相同时间的组,因为沿着每一段行进的预期时间将视预测用户何时到达每一可导航段而变化。举例来说,可预测,用户将花5分钟沿着可导航段BD行进,因此,针对段BD及DF而求和到一起的组值可为相隔5分钟的组值,即,将BC的时间组T的值与DF的时间组T+5的值相加。
仅探索为最小成本路径的部分的可导航段,而不探索并非最小成本路径的部分的竞争可导航段。因此,对于待考虑的路径BDF及BCEF两者,两个路径必须被最小成本数据识别为最小成本路径。
如果两个路径BDF及BCEF为在不同时间的最小成本路径,那么在两条路线相交的节点F处,BDF及BCEF的成本概况需要在某种程度上被留存且可能被进一步传播。为了实现此,处理器实行与将两个成本概况(C1及C2)彼此叠加等效的计算,且确定上界分布UB(以实线展示)及下界分布LB(以点线展示)。这在图30及31中展示。UB及LB分布接着被用于进一步传播,从而允许确定每一路线的最大及最小成本概况。
以与后续可导航路线的成本值被添加到这些概况类似的方式发生上界分布及下界分布的进一步传播。如果所探索的路线分开,且接着又在类似于节点F的以后的节点处相交,那么通过将每一进入路径的两个上界概况重叠以确定单个新的上界概况且通过将每一进入路径的两个下界概况重叠以确定单个新的下界概况来再次处理所述两个上界概况及所述两个下界概况。以此方式,将概况的数目的增加保持在不会过度阻碍确定路线所花费的时间或不会需要大量存储器(因为在PND上存储器为有限的)的等级。
在另一实施例中,仅留存上界概况及下界概况中的一者以供沿着路线进一步传播。在另一实施例中,确定两个进入概况的平均值以产生用于沿着路线进一步传播的平均概况。
一旦已确定整条路线的成本概况,就将上概况或下概况中的一者选择为最后成本概况,其用以确定在导航装置上的显示,如现在将加以解释。
图24及25说明可显示成本概况的多个值的方式。
在图24中,通过显示从起点的出发时间及在目的地的到达时间以及隔开预定量(在此实施例中为15分钟)的离散出发时间的时间条来说明成本概况。与图23中的时间条2000相似,每一时间条经色彩译码以指示沿着路线的不同部分的预期速度。提供箭头2001、2002,当用户选择所述箭头时,致使显示器显示出发时间及到达时间的对,以及较早或较迟开始时间的时间条(选择左箭头2001使得显示较早开始时间,及选择右箭头2002使得显示较迟开始时间)。选择时间条可使得显示针对选定开始时间的显示画面(类似图23中所展示的内容)。
在图25中,将成本概况显示为在一组时间段上(在此实例中,在168个小时(等同于一周)中)的连续曲线图。将此曲线图连同地图一起显示,所述地图说明有助于形成此成本概况的从起点到目的地的路线。将曲线图及路线进行色彩译码(如由实线及点线所说明),使得用户可确定在什么时间将使用哪些路线。举例来说,将7小时40分钟与9小时15分钟之间的曲线图着色以展示在路线的开始,应遵循虚线路线2003,而不是非点线路线2004的第一部分。此显示允许用户容易地看到在起点与目的地之间行进的成本如何随着时间而改变及这如何影响路线。
图26到28说明替代实施例。在此实施例中,已确定成本概况,如上文所描述,但仅显示针对由用户指定的行进时间而确定的路线的图像。然而,显示器上为框2010,其展示所显示的路线可适用的日及时间。可由用户在检视展示所确定的路线的地图数据的图像的同时选择设在日及时间的任一侧的箭头以改变日及/或时间。改变日及/或时间可引起路线改变,且显示器被更新以显示新路线以及在所述路线上行进所花费的时间及所行进的距离的任何改变。在图27及28中展示这些经更新的显示的实例。
“实时”地(例如,在毫秒的数量级)发生显示的更新,例如,小于1000毫秒且优选小于500毫秒。可经由使用预处理的最小成本数据,及/或因为针对这些其它时间的路线已经由概况搜索而确定来实现此些快速重新计算时间。
图29说明使用概况搜索的导航装置的另一功能。在此实施例中,在选择了行进时间(例如,开始时间)时,导航装置的处理器可比较在所述时间行进的成本与在所述行进时间周围的窗(例如,行进时间±30分钟)中成本概况的值。如果处理器发现所述窗内的行进时间具有较低成本,那么处理器可致使显示器显示给出较佳结果的行进时间的指示。举例来说,在所说明的实施例中,显示备注2015,所述备注2015告知用户如果他/她15分钟后行进,那么行进时间将为较短的(在此情况下,短10分钟)。
为了执行目前为止所描述的路线选择,使用解码过程从关于图11到13所描述的经编码的侧文件获得位向量信息。
上文所描述的预处理的输出包含:
·对大多数节点的层级式区指派,及
·对这些节点处的外出道路段的位向量指派。
地图加载
一致性检查
当加载地图数据时,侧文件的集合应呈现于地图目录中,否则,解码器将使搜索加速数据去活,使得在不具有搜索加速数据的情况下实行路线搜索。存在有助于确保数据完整性的若干检查,现在列出所述检查。
侧文件遵循命名惯例。
等级的数目由侧文件的数目给出,但等级的数目还存储在每一侧文件的标头中且等于侧文件的数目。
每一侧文件存储在其相应等级处的区的数目,其与在侧文件名称中指定的数目相同。此外,侧文件存储以下信息(其对于所有侧文件应相同):
·侧文件版本。
·每“位向量页”的节点的数目(下文解释)。
每一侧文件中还存在校验和,其识别
·作为整体的特定侧文件集合
·作为整体的地图。
对于给定电子地图的相关联的侧文件,这些信息应为正确的。如果上述检查中的任一者失败,那么将不针对此地图激活搜索加速数据特征。
加载到存储器中的数据结构
解码器读取外部存储器实施方案中的侧文件。这意味着位向量侧文件的内容不被完全加载到存储器中,而是仅根据需要来读取。然而,在开始时将一些一般性数据加载到存储器中,且只要所述地图被加载,所述数据就被保持于其中。
标头信息
每一侧文件以标头区段开始,所述标头区段含有上文关于图8到10所描述的数据。每一侧文件的此信息存储在存储器中。
霍夫曼树定义
侧文件含有若干霍夫曼树的定义。每一霍夫曼树定义给出对特定霍夫曼编码的完整描述,且稍后被用以将侧文件位流的一部分解码成原始数据(即,将来自侧文件的位序列解码成数目或某其它特定值)。从每一侧文件读取以下霍夫曼树定义且将其保持于存储器中。
·用于解码每一节点处的道路段的数目的霍夫曼树。(经编码的道路段数目可比基础地图中的道路段的数目小。注意,解码器独立于基础地图,即,其不需要读取地图)。此霍夫曼树仅存储在等级0的侧文件中。
·用于解码页码的霍夫曼树(下文解释)。
·用于解码位向量块的若干霍夫曼树。树定义的数目是由如存储在侧文件标头中的规则位向量块长度给出;其等于块长度减去一。(道路段的位向量的整个位串被***成块。如果位向量位串的长度不是规则块长度的倍数,那么最终块较短。对于从2直到规则块长度的每一块长度,存在一个霍夫曼树。霍夫曼树不被用于长度为一的块,因为这仅为一位且被直接存储)。
·用于为位向量选择解码方法的若干霍夫曼树。在标头中指定这些树的数目;在下文解释其使用。
邻居列表
在除了最精细等级外的每一等级处,侧文件编码邻居列表。等级k处的区的邻居列表为零或零个以上被称为等级k区的邻居的等级(k+1)区的列表。等级k的侧文件处的邻居列表区段具有两个部分。
·第一部分含有每一等级k子区的邻居区的数目。举例来说(k=1),如果在全局等级0处存在4000个区,且每一全局区被再分成10个等级1区,那么等级1侧文件含有4000*10个等级1子区。对于这些子区中的每一者,给出个别邻居列表(其由等级2区组成)的长度。
·第二部分含有实际邻居列表,其相应长度从第一部分获知。每一邻居列表为等级(k+1)子区的列表。
区重新映射表
侧文件(例如)通过聚结及重新排序等等而以压缩格式存储位向量。等级k处的侧文件具有用以解压缩按块编码的位向量的区重新映射表。其由两部分组成:
·第一部分为按等级k子区编索引的阵列。对于等级k处的每一子区,其含有经压缩的位向量的长度。这对于按块编码位向量的相应子区中的节点的所述外出道路段为相关的。
·第二部分为按(1)未压缩的位向量中的位位置及(2)等级k子区编索引的二维阵列。所述阵列条目指定了按块读取的未压缩位串中的给定位位置在经压缩位向量中的位位置。
注意,仅第一部分被保持于存储器中;第二部分仅在解码期间被按需使用,因为其较大。当前,仅在全局等级侧文件(k=0)处存储区重新映射表。
起始路线查询
解码器是用以加速从出发位置到目的地节点集合的路线搜索。(目的地由一个以上节点组成的实例是将整个道路路段用作目的地时的情况)。目的地节点界定一个或一个以上目标区的集合。
注意,目标区为区ID的序列,每一分割等级有一区ID(开始于等级0处)。在每一新搜索的开始,通过清除先前目标区集合且将新的目的地节点传递到解码器而创建目标区的集合。解码器将确定不重复的目标区的列表。用于找到给定节点的区的机制与在搜索期间相同;细节见下文。
在路线搜索期间扫描节点
剩余论述假定已设定目标区的集合。解码器的特征为当被提供道路网络的节点ID时传回按离开此节点的道路段编索引的位阵列(此节点及给定目标区的位向量)的功能。节点及节点处的道路段的排序由地图界定。每当位值为零时,这意味着在搜索期间可忽略对应道路段。(这通常导致搜索空间的大量减少,且因此搜索的运行时间的大量减少)。
对于少数节点,区信息或位向量数据均不存储在侧文件中。对于这些节点,解码器传回所有位皆为1的位串。(这将防止路线搜索跳过此节点处的任何道路段)。解码器具有指示是否此为针对给定节点的情况的布尔(Boolean)查询功能。此外,存在指示给定节点是否位于先前所定位的目标区中的一者中的布尔查询功能。由解码器传回的在目标区中的节点的位向量再一次为所有位为1的位串。这些布尔查询功能是用于路线搜索中的优化。
根据侧文件格式,按若干步骤解码给定节点的位向量数据。在每一侧文件中,将区及位向量信息组织成所谓的页。每页的节点的数目为2的固定幂(例如,16),且对于侧文件集合中的每一侧文件为相同的。这意味着,对于给定节点ID,可通过简单的位移位来计算位向量页的页索引。节点的信息被按节点ID连续存储。
找出给定节点的页偏移
对于每一侧文件,每页的字节的平均数目被存储在侧文件的标头中。所述平均数目被用以通过使页索引乘以平均大小而近似得出页的字节偏移。将校正项存储在按页索引来编索引的表中。此表被存储在侧文件的单独区段中。当查询页时,在表中查找校正项,且将所述校正项与近似页偏移相加,从而给出所述页在侧文件中的位置。
解码页
高速缓存
当第一次查询页时,解码(相对于固定目标区集合)并高速缓存所述页中的节点的位向量串。下一次从同一页查询节点的数据时,可使用经高速缓存的数据而不进行任何侧文件存取。经解码的位向量位串中的特殊标记位是用以记住所述节点是否为无信息节点。
页码
对于每一页,所谓的页码位指定所述页中的所有节点是否具有相同区ID。页码对于每等级含有一个位,但所有位仅在等级0侧文件中的页的开始处被存储为共同霍夫曼符号。
解码外出道路段计数
如上文所提到,每一页含有固定数目个节点的信息。节点的此数目存储在每一侧文件的标头中。在一页的开始(或针对等级0,在页码之后),所述页列出所述页中的每一节点的外出道路段的数目。每当外出道路段的数目为零时,这意味着根本未存储对应节点的信息。在解码所述页时,数目被存储在临时阵列中。
解码区
在道路段计数区段之后是区区段。节点的区由区ID的序列给出,每一等级处有一个区ID。特定等级的区ID存储在对应侧文件中。解码器读取页中的所有节点在所有等级处的区。当未存储节点的信息(即,节点的道路段计数为零)时,使区信息为空的。解码器读取道路段计数大于零的第一个节点的区ID序列。如果给定等级处的页码指定所述级处的所有区ID为相同的,那么在所述级处为所有节点设定相同区ID。否则,读取具有正道路段计数的所有节点的在对应等级处的区ID。在此过程的结束时,解码器已用页的所有节点的完整区ID序列填充表(其中一些序列可为空的)。
解码位向量
找出相关位位置的集合
对于给定节点及目标区来说,特定等级处的特定位确定离开此节点的道路段的位向量位的值。当存在一个以上目标区时,将所得位一起进行“或”运算。对于每一节点,解码器计算相关位位置的集合。对于所述节点处的每一外出道路段,相关位位置的集合相同。这仅视节点的区及目标区的集合而定。如果仅存在一个目标区,那么在一等级处将仅存在一个相关位位置;换句话说,对于此节点,可忽略其它等级处所存储的信息。在一个以上目标区的情况下,一些相关位位置可重合,所以始终存在多少目标区就至多存在多少相关位位置。在下文中,将论述解码器如何确定一个目标区的相关位位置。对于一个以上目标区来说,以相同方式找到相关位位置且将相关位位置组合成一集合。
当未界定邻居区时,对于每一等级处的每一目标区存在一个位向量位(每外出道路段)。(为简单起见,忽略对于节点自身的区ID不存储位的事实)。相关位处于第一等级(从等级0计数),在所述级处,节点的区ID不同于目标区的区ID。举例来说,如果全局等级处的节点的区ID等于全局处的目标区ID,但所述两个区ID在等级1处为不同的,那么相关位位置处于等级1,且其等于目标区ID。所述相关位位置为所述级处的未压缩的位向量串中的位位置;此串针对每一可能的目标区ID含有一个位。区重新映射表是用以将此位置变换成经压缩位向量串(在所述级实际上被编码的串)中的位置。
当界定了邻居区时,那么相关位被确定在“最精细”等级(在此处目标区为所述节点的区的邻居)处。将四个等级作为实例,令目标区ID序列为(a,b,c,d),且令节点的区ID序列为(e,f,g,h)。如果(a,b,c,d)为(e,f,g)的邻居(如在邻居列表区段中所定义),且(a,b)为(e)的邻居,那么相关位由(a,b,c,d)确定且位于等级2处,即含有作为邻居的(a,b,c,d)的(e,f,g)前缀的等级。更精确地说,相关位位置为等级2侧文件中作为区(e,f,g)的邻居的(a,b,c,d)的索引。在此情况下,区ID的规则位h(如先前段中所解释)为不相关的。此外,此相关位位置是相对于未压缩的位向量串。解码器使用区重新映射表以将其变换到等级2处的经压缩位串中的位位置。关于邻居列表的更多信息包含于“增强的多等级图分割的提案(Proposalforenhancedmulti-levelgraphpartitioning)”的文献中。
解码位向量位
在给定目标区的固定集合的情况下,页中的每一节点的位向量将由每外出道路段一个位组成。如果节点的道路段计数为零(即,节点为无信息节点),那么将把每一位设定成1,而对于所述节点不进行进一步解码。如果节点位于目标区中的一者中,那么位向量将又为全1;在此情况下,可能必须跳过经编码的数据以便解码后续节点的数据。
如果当前节点的位向量并非平凡地为全1,那么解码器确定相关位位置的集合,如较早所解释。每一位位置是相对于特定等级,即,位位于特定侧文件中。在每一等级处,侧文件含有完全的经压缩位串,但解码器仅需要提取相关位位置处的位。在解码期间,读取(跳过)不使用的信息(但仅在其后跟有实际上需要的信息的情况下)。否则,根本不读取位流的不使用的部分。
根据等级对相关位位置的集合分组。将相关位置变换成经压缩位串中的位置,而不是解码经压缩位串且将其解压缩以读取相关位置处的位。如果在某等级处存在相关位,那么首先在适当时(解码器记得其已在每一等级处的侧文件中处理到多远)跳过前置节点的数据。当在给定侧文件中到达正被讨论的节点的区段时,逐行解码位向量。对于每一外出道路段来说,存储一个位;其为所有相关位位置的经解码位的“或”运算的结果。当前节点处的特定道路段的信息以指定解码方法的霍夫曼符号开始。其具有以下值中的一者:
·指定此等级处的道路段的所有位向量位为0(包括此等级处的所有邻居位)的符号。对于此道路段,不必解码其它位。
·指定此等级处的道路段的所有位向量位为1(包括此等级处的所有邻居位)的符号。对于此道路段,不必解码其它位。
·指定位向量位串被按块明确给出的符号。在下文解释按块对经压缩位向量位串的解码。将道路段的位向量位置于在整个页的编码期间创建的“历史堆叠”中。
·指定对历史堆叠的索引的符号。在给定索引处,历史堆叠含有道路段的所要位向量位值。
视历史堆叠的当前大小,使用用于解码方法选择器的不同霍夫曼树。在侧文件的标头中存在指定霍夫曼树的数目的限制值;当历史堆叠的大小超过此值时,就重新使用上次的霍夫曼树。
如果方法选择器符号指定位向量串应被明确地编码,那么解码器逐块地读取经压缩位向量位串。解码器收集此等级处的相关位位置(相对于经压缩位向量串)处的位值。对所述位的值进行“或”运算。所述“或”的中间结果一变成1,就可跳过此道路段的所有其它块中的剩余位。用于解码每一块的霍夫曼树视所述块中的位的数目而定。针对如指定于侧文件标头中的规则块长度存在一个霍夫曼树。道路段的最后块可为较短的;视其大小,将适当霍夫曼树用于解码。长度为一的块为仅一位,将其直接读取而无须霍夫曼解码。
如果块的数目为至少2,那么从位向量产生的位流含有在所述块的霍夫曼符号之前的一额外位。所述位的值指定是否将整个经解码的串理解为实际值的逐位否定。(此否定的目的是更好的霍夫曼压缩)。