著录项信息
专利名称 | 一种车载机自主导航方法 |
申请号 | CN200910311010.6 | 申请日期 | 2009-12-07 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2011-06-08 | 公开/公告号 | CN102087113A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 厦门雅迅网络股份有限公司 | 申请人地址 | 福建省厦门市软件园产业基地二期观日路46号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 厦门雅迅网络股份有限公司 | 当前权利人 | 厦门雅迅网络股份有限公司 |
发明人 | 黄思志;杨一麟;刘辉;时宜 |
代理机构 | 厦门市首创君合专利事务所有限公司 | 代理人 | 潘国庆;李雁翔 |
摘要
本发明一种车载机自主导航方法,包含将电子地图按相同大小的矩形分割成顺序编号的网格;对每一网格内的拓扑元素重新编号,逐一生成对应网格的基础数据表;对于所有网格用对应的基础数据表建立本网格内每一条入弧到所有出弧的转向元素,计算对应最短路径的长度,记录到本网格的简化数据表;将所有网格的基础数据表和简化数据表下载到车载机;确定起点和终点所在的道路弧及所在的网格;规划出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径;按简化路径导航中,提前将下一个中间网格的简化最短路径转化为基础数据的最短路径。可快速进入导航状态且占用内存少。
1.一种车载机自主导航方法,包含:
步骤A,将全国范围的电子地图按相同大小的矩形分割成顺序编号的网格;对每一网格内的道路弧、道路弧的转向元素、道路边和道路边上的点重新编号,逐一生成对应网格的基础数据表;对于所有网格逐一用本网格的基础数据表建立本网格内每一条入弧到所有出弧的转向元素,计算出本网格内每一条入弧到所有出弧的最短路径的长度,将本网格内每一条入弧到所有出弧的转向元素及所述最短路径的长度记录到本网格的简化数据表;具体将全国范围的电子地图按相同大小的矩形分割成顺序编号的网格并对每一网格内的道路弧、道路弧的转向元素、道路边和道路边上的点重新编号,逐一生成对应网格的基础数据表的处理,包含以下的子步骤:
子步骤A1,加载全国电子地图的地图源数据,按照规定的网格大小,对上述地图源数据进行切割并顺序编号;计算出每个网格所覆盖的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点,对于每个穿越网格边界的道路边、道路弧等分别切分,并在切分后的道路弧元素间生成新的转向元素;
子步骤A2,按网格编号,顺序在每一个网格内对本网格内的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点分别重新编号;依据上述地图源数据的拓扑关系,在每一网格内及其相邻网格间对重新编号的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点按新的编号建立拓扑关系;把每一网格内的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点, 按照新的编号顺序写入本网格的基础数据表
步骤B,将所有网格的基础数据表和简化数据表下载到车载机;
步骤C,确定起点和终点所在的道路弧,及起点道路弧和终点道路弧所在的网格;
步骤D,规划出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径;具体规划出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径的处理,包含以下的子步骤:
子步骤D1,用起点道路弧所连接的转向元素查找出所有可达的下一条道路弧,将起点道路弧作为这些道路弧的前趋道路弧;将这些道路弧及其前趋道路弧添加到开表中;
子步骤D2,取出开表中离起点道路弧路径最短的道路弧作为当前道路弧,把当前道路弧及其前趋弧信息加入到闭表中;
子步骤D3,若当前道路弧在起点网格,加载起点网格基础拓扑数据表,找到所有当前道路弧连接的转向元素和所有可达的下一条道路弧;若当前道路弧在中间网格,加载当前道路弧所在网格的简化数据表,找到所有当前道路弧连接的简化转向元素和所有可达的下一条道路弧;若当前道路弧在终点网格且不是终点道路弧,加载终点网格基础数据表,找到所有当前道路弧连接的转向元素和所有可达的下一条道路弧;然后执行子步骤D4;若当前道路弧是终点道路弧,执行子步骤D5;
子步骤D4,设置当前道路弧为所有可达的下一条道路弧的前趋道 路弧,把找到的所有可达的下一条道路弧及其前趋道路弧加入到开表中,返回执行子步骤D2;
子步骤D5,取出闭表,把终点道路弧作为当前道路弧;
子步骤D6,把当前道路弧添加到简化路径弧序列开头;
子步骤D7,判断当前道路弧是否是起点道路弧,是则退出;否则在闭表里查找当前道路弧的前趋道路弧,将该前趋道路弧作为当前道路弧,再次执行子步骤D6,继续回溯;
步骤E,按简化路径导航;其中,每当进入一个网格时将下一个中间网格的简化最短路径转化为按基础数据导出的该网格内的最短路径,供进入下一个中间网格时导航用;按简化路径导航的处理,包含以下的子步骤:
子步骤E1,由简化路径弧序列的起点道路弧开始,置起点道路弧为当前道路弧;
子步骤E2,判断当前道路弧是否是终点道路弧,是则退出;否则由简化路径弧序列取出下一条道路弧;
子步骤E3,若下一条道路弧不是跨网格的弧,或者当前道路弧在起点网格或终点网格内,则进行起点网格或终点网格内的导航显示的扩展;否则进行中间网格的路径扩展,加载当前道路弧所在网格的基础数据表,以本网格当前道路弧对应的入弧为起点道路弧,下一条道路弧对应的出弧为终点道路弧,依据本网格的基础数据表,利用dkstra算法,计算出本网格内基础数据表示的最短路径道路弧序列,把计算出来的道路弧序列,插入到当前道路弧与下一条道路弧之间,计算出来的最短道路弧序列扩展了简化路径中间网格的当前道路弧 到跨网格的下一条道路弧之间的真实道路弧序列;
子步骤E4,生成当前道路弧与下一个道路弧之间的详细导航显示信息,进行导航;把下一条道路弧置为当前道路弧,返回执行子步骤E2,继续向终点道路弧行进。
一种车载机自主导航方法\n技术领域\n[0001] 本发明涉及一种车辆的导航方法。\n背景技术\n[0002] 随着汽车数量的大幅度增长,具有卫星定位(GPS)的车载导航设备(以下简称车载机)日益得到普及。现有的车载机分为自主导航和中心导航两大类。其中,自主导航是指车载机内保存有电子地图数据;需要导航时,车载机按照驾驶员输入的目的地信息和车辆的当前位置信息利用上述电子地图数据规划出导航路径,然后分段显示该路径上的具体道路信息,引导驾驶员驶向目的地。为了规划出最短的导航路径,通常采用Dijkstra(迪杰斯特拉)单源最短路径算法,采用该算法的导航过程,有以下的操作步骤:\n[0003] 步骤A′,分别找出车辆当前位置(起点)和目的地(终点)所在的道路弧;把起点道路弧添加到待考察的道路弧列表(简称开表);执行步骤B′。\n[0004] 步骤B′,取出开表中离起点道路弧路径最短的道路弧作为当前道路弧;把当前道路弧及其前趋弧信息加入到已考察的道路弧列表(简称闭表)中。执行步骤C′。\n[0005] 步骤C′,判断当前道路弧是否是终点道路弧;是则执行步骤D′;不是则依据当前道路弧连接的转向元素查找所有可达的下一条道路弧;将当前道路弧设置为所有可达的下一条道路弧的前趋道路弧;把找到的所有可达的下一条道路弧加入到开表中;执行步骤B′,继续向前搜索,直至推进到终点道路弧。\n[0006] 步骤D′,从闭表取出终点道路弧作为当前道路弧,开始进行回溯;把当前道路弧添加到最短路径弧序列开头;在闭表里查找当前道路弧的前趋道路弧,作为当前道路弧,把新的当前道路弧添加到最短路径弧序列开头,直至当前道路弧是起点道路弧,最短路径道路弧序列顺序记录了本最短路径上的每一条道路弧。依据最短路径道路弧序列在电子地图数据中索引与各道路弧对应的道路边信息,统计路长并生成包含可输出显示的道路点信息的详细导航路径。执行步骤E′。\n[0007] 步骤E′,运用详细导航路径进行导航显示,引导驾驶员将车辆驶向目的地。\n[0008] 上述车载机自主导航的过程中步骤B′和步骤C′反复循环,以计算一个道路弧节点到其他所有相关道路弧节点的最短路径,以起点道路弧为中心向外层层扩展,直到扩展到终点道路弧为止。计算量非常大,且开表中存储的中间数据量也非常大。所以目前自主导航受车载机内嵌入式微处理器系统运行速度和内存容量的限制,多用于省内的导航,即车载机仅保存本省的电子地图数据,以有限的运行速度和内存容量规划出省内的导航路径。目前,对于全国范围内跨越数省的远距离导航而言,车载机自主导航由于使用的内存量巨大,车载机的内存容量难以满足运算的需要;与由于计算时间长,进入导航状态前的等待时间长;所以不适合全国范围内跨越数省的远距离导航。\n发明内容\n[0009] 本发明旨在提供一种可快速进入导航状态且占用内存少,适合全国范围内跨越数省的远距离导航的车载机自主导航方法。\n[0010] 本发明的技术方案是:一种车载机自主导航方法,包含:\n[0011] 步骤A,将全国范围的电子地图按相同大小的矩形分割成顺序编号的网格;对每一网格内的道路弧、道路弧的转向元素、道路边和道路边上的点重新编号,逐一生成对应网格的基础数据表;对于所有网格逐一用本网格的基础数据表建立本网格内每一条入弧到所有出弧的转向元素,计算出本网格内每一条入弧到所有出弧的最短路径的长度,将本网格内每一条入弧到所有出弧的转向元素及所述最短路径的长度记录到本网格的简化数据表;\n[0012] 步骤B,将所有网格的基础数据表和简化数据表下载到车载机;\n[0013] 步骤C,确定起点和终点所在的道路弧,及起点道路弧和终点道路弧所在的网格;\n[0014] 步骤D,规划出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径;\n[0015] 步骤E,按简化路径导航;其中,每当进入一个网格时将下一个中间网格的简化最短路径转化为按基础数据导出的该网格内的最短路径,供进入下一个中间网格时导航用。\n[0016] 在优选的实施例中:所述的步骤A中,具体将全国范围的电子地图按相同大小的矩形分割成顺序编号的网格;并对每一网格内的道路弧、道路弧的转向元素、道路边和道路边上的点重新编号,逐一生成对应网格的基础数据表的处理,包含以下的子步骤:\n[0017] 子步骤A1,加载全国电子地图的地图源数据,按照规定的网格大小,对上述地图源数据进行切割并顺序编号;计算出每个网格所覆盖的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点,对于每个穿越网格边界的道路边、道路弧等分别切分,并在切分后的道路弧元素间生成新的转向元素;\n[0018] 子步骤A2,按网格编号,顺序在每一个网格内对本网格内的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点分别重新编号;依据上述地图源数据的拓扑关系,在每一网格内及其相邻网格间对重新编号的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点按新的编号建立拓扑关系;把每一网格内的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点,按照新的编号顺序写入本网格的基础数据表。\n[0019] 在优选的实施例中:所述的步骤D中,具体规划出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径的处理,包含以下的子步骤:\n[0020] 子步骤D1,用起点道路弧所连接的转向元素查找出所有可达的下一条道路弧,将起点道路弧作为这些道路弧的前趋道路弧;将这些道路弧及其前趋道路弧添加到开表中;\n[0021] 子步骤D2,取出开表中离起点道路弧路径最短的道路弧作为当前道路弧,把当前道路弧及其前趋弧信息加入到闭表中;\n[0022] 子步骤D3,若当前道路弧在起点网格,加载起点网格基础拓扑数据表,找到所有当前道路弧连接的转向元素和所有可达的下一条道路弧;若当前道路弧在中间网格,加载当前道路弧所在网格的简化数据表,找到所有当前道路弧连接的简化转向元素和所有可达的下一条道路弧;若当前道路弧在终点网格且不是终点道路弧,加载终点网格基础数据表,找到所有当前道路弧连接的转向元素和所有可达的下一条道路弧;然后执行子步骤D4;若当前道路弧是终点道路弧,执行子步骤D5;\n[0023] 子步骤D4,设置当前道路弧为所有可达的下一条道路弧的前趋道路弧,把找到的所有可达的下一条道路弧及其前趋道路弧加入到开表中,返回执行子步骤D2;\n[0024] 子步骤D5,取出闭表,把终点道路弧作为当前道路弧;\n[0025] 子步骤D6,把当前道路弧添加到简化路径弧序列开头;\n[0026] 子步骤D7,判断当前道路弧是否是起点道路弧,是则退出;否则在闭表里查找当前道路弧的前趋道路弧,将该前趋道路弧作为当前道路弧,再次执行子步骤D6,继续回溯。\n[0027] 进而:所述的步骤E中,按简化路径导航的处理,包含以下的子步骤:\n[0028] 子步骤E1,由简化路径弧序列的起点道路弧开始,置起点道路弧为当前道路弧;\n[0029] 子步骤E2,判断当前道路弧是否是终点道路弧,是则退出;否则由简化路径弧序列取出下一条道路弧;\n[0030] 子步骤E3,若下一条道路弧不是跨网格的弧,或者当前道路弧在起点网格或终点网格内,则进行起点网格或终点网格内的导航显示的扩展;否则进行中间网格的路径扩展,加载当前道路弧所在网格的基础数据表,以本网格当前道路弧对应的入弧为起点道路弧,下一条道路弧对应的出弧为终点道路弧,依据本网格的基础数据表,利用dijkstra算法,计算出本网格内基础数据表示的最短路径道路弧序列,把计算出来的道路弧序列,插入到当前道路弧与下一条道路弧之间。计算出来的最短道路弧序列扩展了简化路径中间网格的当前道路弧到跨网格的下一条道路弧之间的真实道路弧序列;\n[0031] 子步骤E4,生成当前道路弧与下一个道路弧之间的详细导航显示信息,进行导航;\n把下一条道路弧置为当前道路弧,返回执行子步骤E2,继续向终点道路弧行进。\n[0032] 本发明车载机自主导航方法,通过将全国电子地图分割为网格化的基础数据表,再将每个网格的基础数据表简化为本网格的简化数据表;该简化数据表仅包含本网格内每一条入弧到所有出弧的转向元素和本网格内每一条入弧到所有出弧的最短路径的长度;规划导航路径时,只计算出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径,大大简化了所有中间网格内最短路径的计算量;在按简化路径导航的过程中,每当进入一个网格时再将下一个中间网格的简化最短路径转化为按基础数据导出的该网格内的最短路径,供进入下一个中间网格时导航用;所以可快速进入导航状态且占用内存少。以厦门到北京的导航过程为例,按常规采用网格化地图+dijkstra算法+嵌入式微处理器系统,得出全部导航路径耗费时间60秒左右,内存占用40M左右;采用本发明的优化导航方法,使用网格化地图+dijkstra算法+嵌入式微处理器系统,得出简化路径耗费时间8秒左右(这时即可开始导航),内存占用2M-3M;边导航边计算得出全部路径总耗费时间20秒左右。在远距离导航的情况下,本发明可以明显地减低硬件的开销并提高了导航的响应速度。\n附图说明\n[0033] 图1为本发明车载机自主导航方法一个实施例的流程图。\n[0034] 图2为本发明车载机自主导航方法中对电子地图划分网格的示意图。\n[0035] 图3为本发明车载机自主导航方法中对相邻的两个网格中一条道路弧进行切分的示意图。\n[0036] 图4为图3中相邻的两个网格中的那条道路弧被切分后的示意图。\n[0037] 图5为图1实施例中建立所有网格的基础数据表的流程图。\n[0038] 图6为图1实施例中建立所有网格的简化数据表的流程图。\n[0039] 图7为本发明车载机自主导航方法中确定起点所在的道路弧的示意图。\n[0040] 图8为图1实施例中确定起点和终点所在的道路弧的流程图。\n[0041] 图9为本发明车载机自主导航方法中利用网格简化导航路径计算的示意图。\n[0042] 图10为图1实施例中规划导航路径的流程图之一。\n[0043] 图11为图1实施例中规划导航路径的流程图之二。\n[0044] 图12为本发明车载机自主导航方法中简化最短路径的起点网格和下一个网格的最短路径数据的示意图。\n[0045] 图13为本发明车载机自主导航方法中车载机进入导航状态并对起点网格的下一个网格的最短路径数据进行扩展后,起点网格和下一个网格的最短路径数据的示意图。\n[0046] 图14为图1实施例中按简化路径导航的流程图。\n具体实施方式\n[0047] 本发明车载机自主导航方法包含生成全国电子地图中每个网格的基础数据表和简化数据表的过程、规划计算简化导航路径的过程和按简化导航路径进行导航并逐一对中间网格的简化最短路径作扩展的过程,这样三个主要过程。\n[0048] 本发明车载机自主导航方法一个实施例的流程,如图1所示。\n[0049] 步骤A,将全国范围的电子地图按相同大小的矩形分割成顺序编号的网格;对每一网格内的道路弧、道路弧的转向元素、道路边和道路边上的点重新编号,逐一生成对应网格的基础数据表;对于所有网格逐一用本网格的基础数据表建立本网格内每一条入弧到所有出弧的转向元素,计算出本网格内每一条入弧到所有出弧的最短路径的长度,将本网格内每一条入弧到所有出弧的转向元素及所述最短路径的长度记录到本网格的简化数据表;\n[0050] 步骤B,将所有网格的基础数据表和简化数据表下载到车载机;\n[0051] 步骤C,确定起点和终点所在的道路弧,及起点道路弧和终点道路弧列所在的网格;\n[0052] 步骤D,规划出由起点网格内和终点网格内按对应基础数据表导出的最短路径、所有中间网格内按对应简化数据表导出的简化最短路径组成的简化路径;\n[0053] 步骤E,按简化路径导航;其中,每当进入一个网格时将下一个中间网格的简化最短路径转化为按基础数据导出的该网格内的最短路径,供进入下一个中间网格时导航用。\n[0054] 步骤A表达了在地图服务中心生成全国电子地图中每个网格的基础数据表和简化数据表的过程。\n[0055] 本过程中,首先依据全国电子地图,抽取其中所有的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点等路径规划所需的地图信息,生成全国电子地图的中间地图数据。接着,对该全国电子地图的中间地图数据依照定义好的的网格大小,进行逐个划分并编号。\n[0056] 请参看图2:把全国电子地图的中间地图数据按照经度差为256″(秒)、纬度差为256″(秒)的网格大小进行切分,在纬度方向上各网格由南至北分成M行,在经度方向各网格分成K列。而后,从编号0开始对每个网格顺序编号,横向同一行内各网格的编号在经度方向由西到东按纵向列的顺序递增,接着由南至北纵向对新一行网格编号。\n[0057] 任一个网格W的编号为:W=(该网格所在行的行号-1)*(总列数K)+(该网格所在列的列号-1);\n[0058] 令经纬度的单位均为:1/128秒。图2中全国电子地图左下角Q点的经度为\n33811200个单位、纬度为:8332800个单位;右上角T点的经度为62319360个单位、纬度为\n24716800个单位;Q、T两点间经度方向上每一行的网格个数K=870,纬度方向上每一列的网格个数M=500。\n[0059] 对于任意一个位置点,可以计算出该点与Q点的经纬度差,从而确定该点所在网格的行号和列号,进而计算出该点所在网格的编号。\n[0060] 对相邻的两个网格中一条道路弧进行切分的情形,请参看图3和图4:道路弧a跨越于网格A和网格B之间。切分后道路弧a被分割为为于网格A内的道路弧a1和位于网格B内道路弧b,以及附属于道路弧a1的转向元素ab。对网格A而言,道路弧b是一条从本网格流出到相邻网格的道路弧,我们称道路弧b为网格A的一条出弧。对网格B而言,道路弧b是一条从相邻网格流入本网格的道路弧,我们称道路弧b为网格B的一条入弧。\n[0061] 接着,对于划分好的每个网格内的中间地图数据重新进行编号,分别打包生成对应网格的基础数据表。具体的操作,请参看图5:\n[0062] 子步骤100,开始,进入本操作流程,执行子步骤101。\n[0063] 子步骤101,加载全国电子地图按行政区划分的中间地图数据的地图源数据。执行子步骤102。\n[0064] 子步骤102,按照规定的网格大小,对上述地图源数据进行切割。其中网格是按上述固定的经差纬差划分并顺序编号的。根据网格化地图的边界经纬度和固定的经差纬差,计算出每个网格所覆盖的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点等拓扑元素。对于每个穿越网格边界的拓扑元素,例如道路边、道路弧等分别切分,并在切分后的道路弧元素间生成新的转向元素,建立新的拓扑关系。执行子步骤103。\n[0065] 子步骤103,按网格编号(网格ID),顺序在当前的一个网格内对每个拓扑元素,即本网格内的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点等拓扑元素,分别从1开始分别重新编号,每个编号即为该拓扑元素的ID。其中所有入弧的编号集中排在本网格其他道路弧的前面,这样做是为了与后面生成的本网格简化数据表中所有入弧的编号一一对应,以便由本网格简化数据表中一个入弧的编号唯一地找到本网格的基础数据表中编号相同的同一条入弧。执行子步骤104。\n[0066] 子步骤104,依据上述地图源数据的拓扑关系,对重新编号的道路弧、每一道路弧的所有转向元素、每一道路弧所对应的道路边和每一道路边上所有的点等拓扑元素在当前网格内及相邻网格间建立拓扑关系。即:在保留源数据中的拓扑关系基础上,把原先各个拓扑元素间的索引关系由全局的拓扑元素ID改为新编号的拓扑元素ID表示。其中当前网格内部各个拓扑元素间的索引关系用相应拓扑元素在当前网格内的ID表示,相邻网格间各个拓扑元素间的索引关系用相应拓扑元素在各自网格内的ID以及各自所在网格的ID联合表示。执行子步骤105。\n[0067] 子步骤105,把当前网格内的拓扑元素,按照新的编号顺序写入本网格的基础数据表。执行子步骤106。\n[0068] 子步骤106,把当前网格的基础数据表都保存到基础文件;执行子步骤107。\n[0069] 子步骤107,检查是否处理完所有的网格,是则执行子步骤108;否则执行子步骤\n103,继续处理下一网格内的拓扑元素。\n[0070] 子步骤108,结束本流程。\n[0071] 然后利用每个网格的基础数据表,在每个网格中,建立每个入弧到每个与本网格相邻网格的出弧的转向元素;把每个入弧当做起点道路弧,每个与本网格相邻网格的出弧当做终点道路弧,用Dijkstra算法,计算出该网格内每一条入弧到所有出弧的最短路径的长度;将该网格内每一条入弧到所有出弧的转向元素及对应的最短路径的长度记录到该网格的简化数据表。每个入弧到对应出弧的转向元素包含的数据有:该入弧的编号(ID)、该入弧所在网格的编号(ID)、该入弧连接的出弧的编号(ID)、该出弧所在网格的的编号(ID)和该入弧到该出弧的最短路径的长度。具体将每个网格的基础数据表转化为简化数据表的操作,请参看图6:\n[0072] 子步骤200,开始,进入本流程,执行子步骤201。\n[0073] 子步骤201,加载基础数据文件中所有网格的基础数据表的地址。执行子步骤\n202。\n[0074] 子步骤202,按照网格的编号(ID)顺序加载一个未处理网格的基础数据表。执行子步骤203。\n[0075] 子步骤203,顺序取当前网格中一个入弧作为当前起点道路弧。执行子步骤204。\n[0076] 子步骤204,在当前网格中,顺序取一条与当前起点道路弧对应的出弧为当前终点道路弧,建立当前起点道路弧到当前终点道路弧的转向元素,根据Dijkstra算法计算当前起点道路弧到当前终点道路弧的最短路径,将这条最短路径的长度和上述转向元素一起记入本网格的简化数据表。上述转向元素包含的数据有:当前起点道路弧的编号(ID)、当前起点道路弧所在网格的编号(ID)、当前起点道路弧连接的出弧的编号(当前终点道路弧ID)、出弧(当前终点道路弧)所在网格的的编号(ID)及当前起点道路弧到当前终点道路弧ID最短路径的长度。执行子步骤205。\n[0077] 子步骤205,检查是否所有与当前起点道路弧对应的出弧都已处理完了,是则执行子步骤206;否则执行子步骤204,继续处理到达下一出弧的最短路径。\n[0078] 子步骤206,检查是否当前网格的所有入弧都已处理完了,是则执行子步骤207;\n否则执行子步骤203,继续处理当前网格的下一入弧。\n[0079] 子步骤207,将当前网格的简化数据表存入简化文件。执行子步骤208。\n[0080] 子步骤208,判断是否所有网格已处理完,是则执行子步骤209,否则执行子步骤\n202,继续处理下一网格内基础数据向简化数据的转化。\n[0081] 子步骤209,结束本流程。\n[0082] 步骤B中,可以采用无线传输或有线传输或利用光盘、U盘、移动硬盘等存储介质将所有网格的基础数据表和简化数据表下载到车载机;\n[0083] 请参看图7:由于起点(出发点)周围的道路弧A、道路弧B、道路弧C、道路弧D、道路弧E、道路弧F中最靠近起点的道路弧A有可能并不在出发点所在的网格内。同理,最靠近终点的道路弧也可能不在终点所在的网格内。为了满足Dijkstra算法的需要,必须预先确定最靠近起点的道路弧(起点道路弧)和最靠近终点的道路弧(终点道路弧),所以需要设置步骤C,确定起点和终点所在的道路弧,及起点道路弧和终点道路弧列所在的网格。具体的操作,请参看图8:\n[0084] 子步骤300,开始,进入本流程,执行子步骤301。\n[0085] 子步骤301,输入导航起点和终点的经纬度信息。执行子步骤302。\n[0086] 子步骤302,根据网格划分规则计算起终点经纬度所在网格的编号(ID)。执行子步骤303。\n[0087] 子步骤303,根据网格ID加载该网格及周边8个网格的基础数据表。执行子步骤\n304。\n[0088] 子步骤304,分别搜索以起点和终点周围的道路边。即分别以起点和终点为目的点,先以目的点的经纬度为中心确定一个搜索矩形,利用道路边记载的外接矩形信息,找出所有与搜索矩形相交的道路边。利用道路边对应的点集信息,可以计算出目的点到这些道路边的投影距离。若在当前搜索矩形内未找到与搜索矩形相交的道路边,则逐步扩大搜索矩形,直到找到投影距离在可接受的规定范围之内的道路边。执行子步骤305。\n[0089] 子步骤305,利用找到的道路边筛选出距离起点和终点投影距离最近的道路边,按距离起点投影距离最近的道路边确定与该道路边对应的道路弧作为起点道路弧;按距离终点投影距离最近的道路边确定与该道路边对应的道路弧作为终点道路弧。进而确定起点道路弧和终点道路弧列所在的网格。执行子步骤306。\n[0090] 子步骤306,结束本流程。\n[0091] 子步骤D表达了规划出简化路径的过程。本过程中,请参看图9:由起点网格内和终点网格内按对应基础数据表记载的基础数据分别推导出起点网格内用实线表示的最短路径和终点网格内用实线表示的最短路径,在所有中间网格内按对应简化数据表记载的简化数据推导出用虚线表示的简化最短路径,上述起点网格内的最短路径、终点网格内的最短路径和所有中间网格内的简化最短路径组成总的简化路径。本过程中具体的操作,请先参看图10:\n[0092] 子步骤400,进入本流程,开始规划简化路径上的所有道路弧,执行子步骤401。\n[0093] 子步骤401,用起点道路弧所连接的转向元素查找出所有可达的下一条道路弧,将起点道路弧作为这些道路弧的前趋道路弧;将这些道路弧及其前趋道路弧添加到待考察的道路弧列表(开表)中。加入开表中道路弧的数据包括:本道路弧ID、本道路弧所在网格ID、本道路弧到起点道路弧的最短的路径长度代价、本道路弧的前趋道路弧ID和本道路弧的前趋道路弧所在网格ID;执行子步骤402。\n[0094] 子步骤402,取出开表中离起点道路弧路径最短的道路弧作为当前道路弧。计算某道路弧离起点道路弧的路径长度代价的方法为:开表中前趋弧到起点弧最短的路径长度代价+本道路弧的道路长度代价(可从本道路弧对应的道路边元素获取)。执行子步骤403。\n[0095] 子步骤403,把当前道路弧及其前趋弧信息加入到已考察的道路弧列表(闭表)中。加入闭表中的数据包括:当前道路弧ID、当前道路弧所在网格ID、前趋道路弧ID、前趋道路弧所在网格ID。执行子步骤404。\n[0096] 子步骤404,依据当前道路弧所在网格ID与终点道路弧所在网格ID做对比,判断当前道路弧是否在终点网格。是则执行子步骤406,进行终点网格内的推进;不是则执行子步骤405,进行起点网格或中间网格的推进处理。\n[0097] 子步骤405,依据当前道路弧所在网格ID与起点道路弧所在网格ID做对比,判断当前道路弧是否在起点网格。是则执行子步骤408,在起点网格内向外推进;不是则执行子步骤407,由中间网格向外推进。\n[0098] 子步骤406,依据当前道路弧所在网格ID与终点道路弧所在网格ID做对比,判断当前道路弧是否是终点道路弧。是则执行子步骤412;不是则执行子步骤409,在终点网格内继续向终点道路弧推进。\n[0099] 子步骤407,依据当前道路弧所在网格ID,加载当前道路弧所在网格的简化数据表;在简化数据表中按当前道路弧ID找到所有当前道路弧连接的简化转向元素,依据这些简化转向元素找到所有可达的下一条道路弧。执行子步骤410。\n[0100] 子步骤408,依据当前道路弧所在网格ID,加载起点网格基础拓扑数据表,在基础数据表中按当前道路弧ID找到所有当前道路弧连接的转向元素,依据这些转向元素找到所有可达的下一条道路弧。执行子步骤410。\n[0101] 子步骤409,依据当前道路弧所在网格ID,加载终点网格基础数据表,在基础数据表中按当前道路弧ID找到所有当前道路弧连接的转向元素,依据这些转向元素找到所有可达的下一条道路弧。执行子步骤410。\n[0102] 子步骤410,设置当前道路弧为所有可达的下一条道路弧的前趋道路弧。执行子步骤411。\n[0103] 子步骤411,把找到的所有可达的下一条道路弧及其前趋道路弧加入到开表中。加入开表中的数据包括:下一条道路弧ID、下一条道路弧所在网格ID、下一条道路弧到起点道路弧的最短的路径长度代价、下一条道路弧的前趋道路弧ID、下一条道路弧的前趋道路弧所在网格ID。所有计算出来的前趋弧信息都必须保存下来,为最后的路径结果回溯做准备。执行子步骤402,继续向终点道路弧推进。\n[0104] 子步骤412,找到了到达终点道路弧的最短的简化路径上的所有道路弧,并已将它们记录在闭表中;本流程结束。\n[0105] 闭表中记录的信息包含了前趋道路弧等亢余的数据,需要加以简化。具体的操作,请参看图11:\n[0106] 子步骤500,进入本流程,开始将闭表中记录的道路弧信息回溯为清晰的简化路径弧序列,执行子步骤501。\n[0107] 子步骤501,取出闭表,把终点道路弧作为当前道路弧,由当前道路弧开始进行回溯。执行子步骤502。\n[0108] 子步骤502,把当前道路弧添加到简化路径弧序列开头。简化路径弧序列指包含粗回溯结果路径的道路弧和简化道路弧序列,其中的数据,包含道路弧(或简化道路弧)ID和道路弧(或简化道路弧)所在网格ID。执行子步骤503。\n[0109] 子步骤503,判断当前道路弧是否是起点道路弧,是则执行子步骤505,否则执行子步骤504。\n[0110] 子步骤504,在闭表里查找当前道路弧的前趋道路弧,将该前趋道路弧作为当前道路弧。执行子步骤502,继续回溯。\n[0111] 子步骤505,本流程结束。\n[0112] 步骤E表达了按简化路径导航的过程。请参看图13:若从厦门某地出发,简化路径弧序列提供的简化路径中,在起点网格内提供了按基础数据导出的该网格内详细的最短路径,而在下一个中间网格内仅提供了按简化数据导出的该中间网格内的简化最短路径。为使车辆在中间网格内得到正确的导航,请参看图14,每当进入一个网格时将下一个中间网格的简化最短路径转化为按基础数据导出的该网格内的详细导航路径,供进入下一个中间网格时导航用。\n[0113] 将简化路径弧序列表示的简化路径用于导航的操作,请参看图14:\n[0114] 子步骤600,开始,进入本流程,执行子步骤601。\n[0115] 子步骤601,由简化路径弧序列的起点道路弧开始便于导航显示的扩展;置起点道路弧为当前道路弧。执行子步骤602。\n[0116] 子步骤602,判断当前道路弧是否是终点道路弧,是则执行子步骤611;否则执行子步骤603。\n[0117] 子步骤603,由简化路径弧序列取出下一条道路弧。执行子步骤604。\n[0118] 子步骤604,判断下一条道路弧是否与当前道路弧在同一网格,以区分下一条道路弧是否是跨网格的弧;是则执行子步骤609,进行起点网格或终点网格内的导航显示的扩展;否则执行子步骤605。\n[0119] 子步骤605,判断当前道路弧是否在起点网格或终点网格,是则执行子步骤609,进行起点网格或终点网格内的导航显示的扩展;否则执行子步骤606,进行中间网格的路径扩展。\n[0120] 子步骤606,加载当前道路弧所在网格的基础数据表。执行子步骤607。\n[0121] 子步骤607,以本网格当前道路弧对应的入弧为起点道路弧,下一条道路弧对应的出弧为终点道路弧,依据本网格的基础数据表,利用dijkstra算法,计算出本网格内基础数据表示的最短路径道路弧序列。执行子步骤608。\n[0122] 子步骤608,把计算出来的道路弧序列,插入到当前道路弧与下一条道路弧之间。\n计算出来的最短道路弧序列扩展了简化路径中间网格的当前道路弧到跨网格的下一条道路弧之间的真实道路弧序列。执行子步骤609。\n[0123] 子步骤609,在基础数据中,每个道路弧能索引到对应的道路边,每个道路边能索引到该道路边上的点集。利用一段路径的道路弧信息,能索引出所有该段路径上的点,生成当前道路弧与下一个道路弧之间的详细导航显示信息,进行导航。执行子步骤602。\n[0124] 子步骤610,把下一条道路弧置为当前道路弧。执行子步骤602继续向终点道路弧行进。\n[0125] 子步骤611,到达终点道路弧,本流程结束。\n[0126] 以上所述,仅为本发明较佳实施例,不以此限定本发明实施的范围,依本发明的技术方案及说明书内容所作的等效变化与修饰,例如用类似贪心算法替代Dijkstra算法,进行路径计算,皆应属于本发明涵盖的范围。
法律信息
- 2013-02-27
- 2011-09-21
实质审查的生效
IPC(主分类): G01C 21/34
专利申请号: 200910311010.6
申请日: 2009.12.07
- 2011-06-08
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-04-11
|
2006-10-08
| | |
2
| |
2009-07-22
|
2009-02-13
| | |
3
| |
2006-02-08
|
2005-08-18
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |