CN101840416B - 一种跨区域路径搜索方法及装置 - Google Patents
一种跨区域路径搜索方法及装置 Download PDFInfo
- Publication number
- CN101840416B CN101840416B CN2010101268705A CN201010126870A CN101840416B CN 101840416 B CN101840416 B CN 101840416B CN 2010101268705 A CN2010101268705 A CN 2010101268705A CN 201010126870 A CN201010126870 A CN 201010126870A CN 101840416 B CN101840416 B CN 101840416B
- Authority
- CN
- China
- Prior art keywords
- segmental arc
- city
- steering state
- tanp
- path
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Train Traffic Observation, Control, And Security (AREA)
- Navigation (AREA)
Abstract
本发明涉及一种跨区域路径搜索方法及装置。该方法包括:加载全国路网索引表以及常用的网络图层至内存;从全国路网索引表中查询起点城市和终点城市之间的路径类型、起点城市对应的城市出口点的坐标和终点城市的对应的城市入口点的坐标,得到第二段路径;查询起点城市中从该起点城市中的具体位置到对应的城市出口点的最短路径,得到第一段路径;查询终点城市中从对应的城市入口点到该终点城市中的具体位置的最短路径,得到第三段路径;返回第一段路径、第二段路径和第三段路径作为跨区域路径搜索结果。本发明能够高效地实现跨区域导航路径搜索。
Description
技术领域
本发明涉及地理信息系统(Geographic Information System,GIS)领域,尤其涉及一种路径结果文字描述及跨区域路径搜索方法及装置。
背景技术
车辆导航系统就是为行驶在城市道路网中的车辆,从当前所处位置到目的地提供有效、精确、快速的行车路线,并引导车辆到达目的地。因而,车辆导航系统的一个基本问题就是路径规划。现实情况下有可能涉及大范围的道路网络查询。例如,私人用户经常需要驱车到另外的城市,此时道路计算所需要的网络就不能仅限于一个城市或一块区域,涉及到的道路网络面积是非常庞大的。而一个城市一般来说需要占用几十兆甚至上百兆的内存,这种拓扑网络的数据量都是海量级的,也就是说,如果建立全国道路网络并全部一次映射到内存中来计算,是不现实的,也是不科学的。因此,对于跨城市的路径规划由于内存占用等问题,需要将不同城市建立不同的拓扑网络,相对于单城市的路径规划要复杂许多。同时对于路径规划计算出的结果,由于系统需要,往往返回结果一系列的LinkID,需要增加路径的文字描述。目前,有学者通过在拐点输入预设信息来解决这个问题,需要存储大量文字和进行预处理。
发明内容
为了解决上述的技术问题,提供了一种跨区域路径搜索方法及装置,其目的在于,实现高效跨区域导航路径搜索,并对导航路径结果动态给出文字描述结果。
本发明提供了一种路径结果文字描述方法,包括:
步骤A,获取路径结果中顺次连接的第一弧段和第二弧段的名称、方向和长度;
步骤B,如果第一弧段的名称和第二弧段的名称相同,则记录并显示第一弧段或第二弧段的方向以及第一弧段的长度与第二弧段的长度之和;
如果第一弧段的名称和第二弧段的名称不同,则记录并显示第一弧段的方向和长度,并且记录和显示第一弧段向第二弧段的转向状态以及第二弧段的方向和长度。
步骤A中,第一弧段或第二弧段的方向用方向角算法求得。
步骤A中,第一弧段或第二弧段的方向按照下列步骤计算:
步骤A1,获取第一弧段或第二弧段的两个端点的坐标(t1.x,t1.y)和(t2.x,t2.y);
步骤A2,计算dx=t2.x-t1.x,dy=t2.y-t1.y;
如果dx=0且dy>0,则方向为“北”;如果dx=0且dy<0,则方向为“南”;
如果dx>0,计算d=dy/dx:
如果d>2.747,则方向为“北”;
如果0.364<d<2.747,则方向为“东北”;
如果-0.364<d<0.364,则方向为“东”;
如果-2.747<d<-0.364,则方向为“东南”;
如果d<-2.747,则方向为“南”;
如果dx<0,计算d=dy/dx:
如果d>2.747,则方向为“南”;
如果0.364<d<2.747,则方向为“西南”;
如果-0.364<d<0.364,则方向为“西”;
如果-2.747<d<-0.364,则方向为“西北”;
如果d<-2.747,则方向为“北”。
步骤B中,第一弧段向第二弧段的转向状态用转向角算法求得。
步骤B中,第一弧段向第二弧段的转向状态依据下列步骤计算:
步骤B1,获取第一弧段和第二弧段的三个端点的坐标(t1.x,t1.y)、(t2.x,t2.y)和(t3.x,t3.y);
步骤B2,计算矢量(t1.x,t1.y)->(t2.x,t2.y)与矢量(t2.x,t2.y)->(t3.x,t3.y)的内积innerp和外积outp:
如果outp=0,则转向状态为“直行”;
如果outp<0,并且innerp=0,则转向状态为“右转”;如果outp<0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则转向状态为“右转”;0<tanp<1,则转向状态为“右转掉头”;如果-1<tanp<0,并且第一弧段和第二弧段同名,则转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,且不存在从(t2.x,t2.y)出发的其他弧段,则转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则转向状态为“靠右”,如果该外积小于0,则转向状态为“靠左”;
如果outp>0,并且innerp=0,则转向状态为“左转”;如果outp>0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则转向状态为“左转”;如果-1<tanp<0,则转向状态为“左转掉头”;如果0<tanp<1,并且第一弧段和第二弧段同名,则转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且不存在从(t2.x,t2.y)出发的其他弧段,则转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则转向状态为“靠右”,如果该外积小于0,则转向状态为“靠左”。
第一弧段、第二弧段的长度或第一弧段的长度与第二弧段的长度之和大于或等于1000米,则换算为公里进行显示。
本发明提供了一种路径结果文字描述装置,包括:
参数获取模块,用于获取路径结果中顺次连接的第一弧段和第二弧段的名称、方向和长度;
文字描述模块,用于在第一弧段的名称和第二弧段的名称相同时,记录并显示第一弧段或第二弧段的方向以及第一弧段的长度与第二弧段的长度之和;在第一弧段的名称和第二弧段的名称不同时,记录并显示第一弧段的方向和长度,并且记录和显示第一弧段向第二弧段的转向状态以及第二弧段的方向和长度。
参数获取模块使用方向角算法求得第一弧段或第二弧段的方向。
参数获取模块,用于获取第一弧段或第二弧段的两个端点的坐标(t1.x,t1.y)和(t2.x,t2.y);计算dx=t2.x-t1.x,dy=t2.y-t1.y;
如果dx=0且dy>0,则参数获取模块获取的方向为“北”;如果dx=0且dy<0,则参数获取模块获取的方向为“南”;
如果dx>0,计算d=dy/dx:
如果d>2.747,则参数获取模块获取的方向为“北”;
如果0.364<d<2.747,则参数获取模块获取的方向为“东北”;
如果-0.364<d<0.364,则参数获取模块获取的方向为“东”;
如果-2.747<d<-0.364,则参数获取模块获取的方向为“东南”;
如果d<-2.747,则参数获取模块获取的方向为“南”;
如果dx<0,计算d=dy/dx:
如果d>2.747,则参数获取模块获取的方向为“南”;
如果0.364<d<2.747,则参数获取模块获取的方向为“西南”;
如果-0.364<d<0.364,则参数获取模块获取的方向为“西”;
如果-2.747<d<-0.364,则参数获取模块获取的方向为“西北”;
如果d<-2.747,则参数获取模块获取的方向为“北”。
文字描述模块使用转向角算法求得第一弧段向第二弧段的转向状态。
文字描述模块,用于获取第一弧段和第二弧段的三个端点的坐标(t1.x,t1.y)、(t2.x,t2.y)和(t3.x,t3.y);计算矢量(t1.x,t1.y)->(t2.x,t2.y)与矢量(t2.x,t2.y)->(t3.x,t3.y)的内积innerp和外积outp:
如果outp=0,则文字描述模块记录并显示转向状态为“直行”;
如果outp<0,并且innerp=0,则文字描述模块记录并显示转向状态为“右转”;如果outp<0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则文字描述模块记录并显示转向状态为“右转”;0<tanp<1,则文字描述模块记录并显示转向状态为“右转掉头”;如果-1<tanp<0,并且第一弧段和第二弧段同名,则文字描述模块记录并显示转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,且不存在从(t2.x,t2.y)出发的其他弧段,则文字描述模块记录并显示转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则文字描述模块记录并显示转向状态为“靠右”,如果该外积小于0,则文字描述模块记录并显示转向状态为“靠左”;
如果outp>0,并且innerp=0,则文字描述模块记录并显示转向状态为“左转”;如果outp>0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则文字描述模块记录并显示转向状态为“左转”;如果-1<tanp<0,则文字描述模块记录并显示转向状态为“左转掉头”;如果0<tanp<1,并且第一弧段和第二弧段同名,则文字描述模块记录并显示转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且不存在从(t2.x,t2.y)出发的其他弧段,则文字描述模块记录并显示转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则文字描述模块记录并显示转向状态为“靠右”,如果该外积小于0,则文字描述模块记录并显示转向状态为“靠左”。
第一弧段、第二弧段的长度或第一弧段的长度与第二弧段的长度之和大于或等于1000米,则换算为公里进行显示。
本发明提供了一种跨区域路径搜索方法,包括:
步骤1,加载全国路网索引表以及常用的网络图层至内存;全国路网索引表中包含起点城市的名称、终点城市的名称、起点城市的出口、终点城市的入口、起点城市的出口的坐标、终点城市的入口的坐标以及起点城市和终点城市之间的路径类型;
步骤2,根据起点名称和终点名称判断与起点城市或终点城市是否已被加载到内存,如果没有,将相应的网络图层加载到内存;起点名称包括起点城市以及在该起点城市中的具体位置,终点名称包括终点城市以及在该终点城市中的具体位置;起点城市和终点城市不同;
步骤3,从全国路网索引表中查询起点城市和终点城市之间的路径类型、起点城市对应的城市出口点的坐标和终点城市的对应的城市入口点的坐标,得到第二段路径;
步骤4,查询起点城市中从该起点城市中的具体位置到对应的城市出口点的最短路径,得到第一段路径;
步骤5,查询终点城市中从对应的城市入口点到该终点城市中的具体位置的最短路径,得到第三段路径;
步骤6,返回第一段路径、第二段路径和第三段路径作为跨区域路径搜索结果。
还包括:
步骤7,获取跨区域路径搜索结果中顺次连接的第一弧段和第二弧段的名称、方向和长度;
步骤8,如果第一弧段的名称和第二弧段的名称相同,则记录并显示第一弧段或第二弧段的方向以及第一弧段的长度与第二弧段的长度之和;
如果第一弧段的名称和第二弧段的名称不同,则记录并显示第一弧段的方向和长度,并且记录和显示第一弧段向第二弧段的转向状态以及第二弧段的方向和长度。
步骤7中,第一弧段或第二弧段的方向用方向角算法求得。
步骤7中,第一弧段或第二弧段的方向按照下列步骤计算:
步骤71,获取第一弧段或第二弧段的两个端点的坐标(t1.x,t1.y)和(t2.x,t2.y);
步骤72,计算dx=t2.x-t1.x,dy=t2.y-t1.y;
如果dx=0且dy>0,则方向为“北”;如果dx=0且dy<0,则方向为“南”;
如果dx>0,计算d=dy/dx:
如果d>2.747,则方向为“北”;
如果0.364<d<2.747,则方向为“东北”;
如果-0.364<d<0.364,则方向为“东”;
如果-2.747<d<-0.364,则方向为“东南”;
如果d<-2.747,则方向为“南”;
如果dx<0,计算d=dy/dx:
如果d>2.747,则方向为“南”;
如果0.364<d<2.747,则方向为“西南”;
如果-0.364<d<0.364,则方向为“西”;
如果-2.747<d<-0.364,则方向为“西北”;
如果d<-2.747,则方向为“北”。
步骤8中,第一弧段向第二弧段的转向状态用转向角算法求得。
步骤8中,第一弧段向第二弧段的转向状态依据下列步骤计算:
步骤81,获取第一弧段和第二弧段的三个端点的坐标(t1.x,t1.y)、(t2.x,t2.y)和(t3.x,t3.y);
步骤82,计算矢量(t1.x,t1.y)->(t2.x,t2.y)与矢量(t2.x,t2.y)->(t3.x,t3.y)的内积innerp和外积outp:
如果outp=0,则转向状态为“直行”;
如果outp<0,并且innerp=0,则转向状态为“右转”;如果outp<0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则转向状态为“右转”;0<tanp<1,则转向状态为“右转掉头”;如果-1<tanp<0,并且第一弧段和第二弧段同名,则转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,且不存在从(t2.x,t2.y)出发的其他弧段,则转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则转向状态为“靠右”,如果该外积小于0,则转向状态为“靠左”;
如果outp>0,并且innerp=0,则转向状态为“左转”;如果outp>0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则转向状态为“左转”;如果-1<tanp<0,则转向状态为“左转掉头”;如果0<tanp<1,并且第一弧段和第二弧段同名,则转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且不存在从(t2.x,t2.y)出发的其他弧段,则转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则转向状态为“靠右”,如果该外积小于0,则转向状态为“靠左”。
第一弧段、第二弧段的长度或第一弧段的长度与第二弧段的长度之和大于或等于1000米,则换算为公里进行显示。
本发明提供了一种跨区域路径搜索装置,包括:
数据加载模块,用于加载全国路网索引表以及常用的网络图层至内存;全国路网索引表中包含起点城市的名称、终点城市的名称、起点城市的出口、终点城市的入口、起点城市的出口的坐标以及终点城市的入口的坐标;根据起点名称和终点名称判断与起点城市或终点城市是否已被加载到内存,如果没有,将相应的网络图层加载到内存;起点名称包括起点城市以及在该起点城市中的具体位置,终点名称包括终点城市以及在该终点城市中的具体位置;起点城市和终点城市不同;
跨区域路径获取模块,用于从全国路网索引表中查询起点城市和终点城市之间的路径类型、起点城市对应的城市出口点和终点城市的对应的城市入口点,得到第二段路径;查询起点城市中从该起点城市中的具体位置到对应的城市出口点的最短路径,得到第一段路径;查询终点城市中从对应的城市入口点到该终点城市中的具体位置的最短路径,得到第三段路径;返回第一段路径、第二段路径和第三段路径作为跨区域路径搜索结果。
还包括:
参数获取模块,用于获取路径结果中顺次连接的第一弧段和第二弧段的名称、方向和长度;
文字描述模块,用于在第一弧段的名称和第二弧段的名称相同时,记录并显示第一弧段或第二弧段的方向以及第一弧段的长度与第二弧段的长度之和;在第一弧段的名称和第二弧段的名称不同时,记录并显示第一弧段的方向和长度,并且记录和显示第一弧段向第二弧段的转向状态以及第二弧段的方向和长度。
参数获取模块使用方向角算法求得第一弧段或第二弧段的方向。
参数获取模块,用于获取第一弧段或第二弧段的两个端点的坐标(t1.x,t1.y)和(t2.x,t2.y);计算dx=t2.x-t1.x,dy=t2.y-t1.y;
如果dx=0且dy>0,则参数获取模块获取的方向为“北”;如果dx=0且dy<0,则参数获取模块获取的方向为“南”;
如果dx>0,计算d=dy/dx:
如果d>2.747,则参数获取模块获取的方向为“北”;
如果0.364<d<2.747,则参数获取模块获取的方向为“东北”;
如果-0.364<d<0.364,则参数获取模块获取的方向为“东”;
如果-2.747<d<-0.364,则参数获取模块获取的方向为“东南”;
如果d<-2.747,则参数获取模块获取的方向为“南”;
如果dx<0,计算d=dy/dx:
如果d>2.747,则参数获取模块获取的方向为“南”;
如果0.364<d<2.747,则参数获取模块获取的方向为“西南”;
如果-0.364<d<0.364,则参数获取模块获取的方向为“西”;
如果-2.747<d<-0.364,则参数获取模块获取的方向为“西北”;
如果d<-2.747,则参数获取模块获取的方向为“北”。
文字描述模块使用转向角算法求得第一弧段向第二弧段的转向状态。
文字描述模块,用于获取第一弧段和第二弧段的三个端点的坐标(t1.x,t1.y)、(t2.x,t2.y)和(t3.x,t3.y);计算矢量(t1.x,t1.y)->(t2.x,t2.y)与矢量(t2.x,t2.y)->(t3.x,t3.y)的内积innerp和外积outp:
如果outp=0,则文字描述模块记录并显示转向状态为“直行”;
如果outp<0,并且innerp=0,则文字描述模块记录并显示转向状态为“右转”;如果outp<0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则文字描述模块记录并显示转向状态为“右转”;0<tanp<1,则文字描述模块记录并显示转向状态为“右转掉头”;如果-1<tanp<0,并且第一弧段和第二弧段同名,则文字描述模块记录并显示转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,且不存在从(t2.x,t2.y)出发的其他弧段,则文字描述模块记录并显示转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则文字描述模块记录并显示转向状态为“靠右”,如果该外积小于0,则文字描述模块记录并显示转向状态为“靠左”;
如果outp>0,并且innerp=0,则文字描述模块记录并显示转向状态为“左转”;如果outp>0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则文字描述模块记录并显示转向状态为“左转”;如果-1<tanp<0,则文字描述模块记录并显示转向状态为“左转掉头”;如果0<tanp<1,并且第一弧段和第二弧段同名,则文字描述模块记录并显示转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且不存在从(t2.x,t2.y)出发的其他弧段,则文字描述模块记录并显示转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则文字描述模块记录并显示转向状态为“靠右”,如果该外积小于0,则文字描述模块记录并显示转向状态为“靠左”。
第一弧段、第二弧段的长度或第一弧段的长度与第二弧段的长度之和大于或等于1000米,则换算为公里进行显示。
本发明能够高效地实现跨区域导航路径搜索,并对导航路径结果动态给出文字描述结果,弥补了静态的在交叉点上预设导航信息导致效率不足的问题。
附图说明
图1为内存调度方案;
图2为跨城市自驾车最短路径查询流程图;
图3为单城市路径查询流程图;
图4为路径结果文字描述举例;
图5为路径结果文字描述流程图;
图6为方向角算法图;
图7为方向角算法问题分析图;
图8为转向角算法图;
图9为转向角算法问题分析图;
图10为路径描述举例。
具体实施方式
考虑到效率优先原则,首先将省级城市之间的道路作为预设信息进行存储,包括高速公路或国道等类型。在全国路网上采用空间换时间的方法,将各省之间道路选择方案采用本地搜索方式;各省网络随需求加载入内存。
全国路网索引结构如表1所示。其中,ID作为主键,由<cityid-cityid>构成的列表作为表项,表示起始城市和终止城市的ID连接,其含义是从某一个省级城市至另一个省级城市。省级城市ID表如表2,例如“北京”为beijing,“上海”为shanghai,山西为shanxi,陕西为shan3xi。因此,从北京至上海的记录ID值即为“beijing-shanghai”。
表1
字段名称 | 字段含义 | 字段类型 | 备注 |
ID | 城市id-城市id | 文本 | 如beijing-shanghai |
CITYA | 城市A | 文本 | 如北京 |
CITYB | 城市B | 文本 | 如上海 |
POINTA | 起点城市A出口 | 文本 | |
POINTB | 终点城市B入口 | 文本 | |
AX | pointA.x | 浮点数字 | |
AY | pointA.y | 浮点数字 | |
BX | pointB.x | 浮点数字 | |
BY | pointB.y | 浮点数字 | |
DESC | 路径描述 | 备注 | |
TYPE | 路径类型 | 整型 | 1表示高速、2表示国道、3表示普通道路 |
表2
城市名称 | ID | 城市名称 | ID |
北京 | beijing | 吉林 | jilin |
安徽 | anhui | 辽宁 | liaoning |
重庆 | chongqing | 内蒙古 | neimenggu |
福建 | fujian | 宁夏 | ningxia |
甘肃 | gansu | 青海 | qinghai |
广东 | guangdong | 陕西 | shan3xi |
广西 | guangxi | 山东 | shandong |
贵州 | guizhou | 上海 | shanghai |
海南 | hainan | 山西 | shanxi |
河北 | hebei | 四川 | sichuan |
黑龙江 | heilongjiang | 天津 | tianjin |
河南 | henan | 新疆 | xinjiang |
湖北 | hubei | 西藏 | xizang |
湖南 | hunan | 云南 | yunnan |
江苏 | jiangsu | 浙江 | zhejiang |
江西 | jiangxi |
全国路网索引表中还记录了起始点和终止点的相关信息,包括起始城市CITYA,起始城市出口POINTA,POINTA的坐标[AX,AY]及终止城市CITYB,终止城市入口POINTB,POINTB的坐标[BX,BY]。
此外,该表中记录了城市之间路径的描述信息及类型。描述信息按照系统习惯进行处理,类型采用整型,1代表高速,2代表国道,3代表普通道路。
全国内陆一共31个省,因此索引表格每种路径类型需要建立映射关系A2 31=930条文本记录。基于上述全国路网索引结构,可以在进行跨城市路径查询时提供快速处理方案。
(一)内存调度方案
如图1,系统启动时,首先将几个常用的省的网络图层从数据库中读出,放入服务器内存中,同时,将全国路网索引结构表读入内存。每个用户请求为一个线程,有其唯一的活跃图层指针(currentLayerP),将currentLayerP默认选择beijing。内存中最多只允许放4-5个省级图层,用户需求发生变化,或相隔一段时间后,进行内存图层扫描,将使用次数最少的图层释放。
(二)路径搜索策略
具体路径搜索流程如图2,步骤如下:
步骤1:系统启动时,加载网络图层及全国路网索引表至内存,将currentLayerP默认选择beijing。
步骤2:收到用户给出请求及四个参数,分别记录起点from和终点to,以及起点城市fromCity和终点城市toCity,同时给出请求路径类型。判断fromCity与toCity是否相同,是转步骤3,否则转步骤4。
步骤3:调用单城市路径查询接口。将currentLayerP指向fromCity,查询from至to的最短路径,返回结果。
步骤4:进行跨区域异构路网查询。首先从全国路网索引结构表中查询fromCity至toCity(ID=fromCity-toCity)的跨城市路径及对应的城市出口点坐标值fromP[Ax,Ay]、入口点坐标值toP[Bx,By]以及路径类型。跨城市路径为最终结果的第二段路径secondroute。
步骤5:调用单城市路径查询接口。将currentLayerP指向fromCity图层,查询从from至fromP之间的最短路径,作为最终结果的第一段路径firstroute。在该步骤中,如果起点城市不存在于内存中,则将起点城市加载至内存中。
步骤6:调用单城市路径查询接口。将currentLayerP指向toCity图层,查询从toP至to之间的最短路径,作为最终结果的第三段路径thirdroute。在该步骤中,如果终点城市不存在于内存中,则将终点城市加载至内存中。
步骤7:返回三段路径(firstroute+secondroute+thirdroute),即成为跨城市自驾车行驶导引结果。
单城市路径查询接口流程如图3,查询最短路径前,需判断city是否在内存中,存在则直接进行搜索,否则调用内存调度算法,将city加载进内存,再进行最短路径查询。
(三)文字描述算法
增加用户的使用方便性与易读性,需要将结果表示如图4所示。本发明设计和构造了方向角算法和转向角算法以解决文字描述问题。文字描述的基本格式为:
“起点:<PointName/RoadName>
1)进入<RoadName>向<Direction><Number>公里/米;
2)<Turning><RoadName>向<Direction><Number>公里/米;
3)<Turning><RoadName>向<Direction><Number>公里/米;
4)<Turning>向<Direction><Number>公里/米;
5)<Turning><RoadName>向<Direction><Number>公里/米到达.
终点:<PointName/RoadName>”
表3
字典 | 含义 | 取值 |
RoadName | 道路名称 | |
PointName | 节点名称 | |
Direction | 方向 | 东、南、西、北、东北、西北、东南、西南 |
Turning | 转向 | 左转、右转、左转掉头、右转掉头、靠左、靠右 |
Number | 里程数 | >0,注意公里/米之间的换算 |
其中字段具体含义参考表3。其中当路径名称<RoadName>发生变化时,给出分条描述。如果转弯后的路段没有<RoadName>,则省略“进入<RoadName>”,例如上述第4条“<Turning>向<Direction>”。
下面给出具体转化方法。在路径分析中,搜索的计算结果一般采用矢量数据格式表示,矢量数据模型一般用x、y坐标和点、线、面简单几何对象来表示空间要素,既存储矢量的坐标信息,又包含属性信息,例如,弧段是道路的抽象,其属性信息一般包括路径代号、路径名称、起始节点、终止节点、长度(例如米为单位)等等,对于每条弧段,通过构造方法getName()及getCost()获得该弧段的名称及长度,因此,<RoadName>和<Number>可以通过简单的查找和累加计算获得。路径结果按照路径顺序记录了一系列弧段数组及相关的节点数组,因为一条弧段有两个节点,因此节点数组数目比弧段数组数目多1,它的表示格式如下edges[n],vertexs[n+1]。稍后将介绍获取<Direction>及<Turning>的构造方法getDirection()及getTurn()。对于输入的矢量路径结果,转化步骤如下,程序流程图如图5所示:
步骤1:初始化字符串str=“”,浮点型cost=0,整型index=1,调用edges[0]的getName()方法获得第一条弧段name,转步骤2。
步骤2:判断name是否为空,如果不为空,则str+=“1)进入”+name,转步骤3,否则str+=“1)”,转步骤3。
步骤3:调用edges[0]的getDirection()和getCost()获得<Direction>和cost,str+=“向”+<Direction>,转步骤4。
步骤4:判断edges是否还有弧段,如果没有则转步骤7,否则获取edges的下一条弧段edges[i],调用getTurn()方法获取该弧段<Turning>。判断edges[i]->getName()是否等于edges[i-1]->getName(),如果相等,则cost+=edges[i]->getCost(),转步骤4,否则转步骤5;i为自然数。
步骤5:判断cost是否小于1000,如果是,则str+=cost+“米;”,转6,否则将cost转化为公里单位,str+=cost+“公里;”,转6。
步骤6:index自加1,str+=index+“)”+<Turning>+edges[i]->getName()。str+=“向”+edges[i]->getDirection(),cost=edges[i]->getCost(),转步骤4。
步骤7:判断cost是否小于1000,如果是,则str+=cost+“米到达.”,算法返回,否则将cost转化为公里单位,str+=cost+“公里到达.”,算法返回。
下面介绍获得<Direction>的算法getDirection()及获得<Turning>的算法getTurn()。
<Direction>主要指车辆行驶过程中的方向,例如东、南、西、北、东北、西北、东南、西南。可以用方向角算法求得。方向角(direction angle)指的是采用某坐标轴方向作为标准方向所确定的角度,一般是指以观测者的位置为中心,将正北或正南方向作为起始方向旋转到目标的方向线所成的角(一般指锐角),通常表达成北(南)偏东(西)××度。为了简明,本文只选用东、南、西、北、东北、西北、东南、西南八个方向。方向角算法需要一条弧段,并返回一条弧段对应的方向。因为实际道路正南正北的比较少,因此可以认为角度在一定范围内属于南或北,角度范围及判定表如图6所示。具体流程如图7所示,步骤如下:
输入:一段弧两端点t1,t2
步骤1:计算dx=t2.x-t1.x,dy=t2.y-t1.y。
步骤2:如果dx不等于0,转步骤3,否则判断dy是否大于零,若dy>0,则返回“北”,否则,返回“南”。
步骤3:如果dx<0,转步骤4,否则计算d=dy/dx:
如果d>2.747,返回“北”,
0.364<d<2.747,返回“东北”,
-0.364<d<0.364,返回“东”,
-2.747<d<-0.364,返回“东南”,
d<-2.747,返回“南”。
步骤4:计算d=dy/dx,如果d>2.747,返回“南”,
0.364<d<2.747,返回“西南”,
-0.364<d<0.364,返回“西”,
-2.747<d<-0.364,返回“西北”,
d<-2.747,返回“北”。
<Turning>是指转向,是在面对交叉口时下一步的行驶选择,通常有以下几种:直行、左转、右转、左转掉头、右转掉头、靠左、靠右。其中靠左、靠右在直行的范围内针对两种交叉路段进行的判断,是面临分叉路口的更精细选择。一般可以通过转向角算法求得。转向角算法需要两条弧段,并返回前后两条弧组成的折线转向状态。算法需要计算两条弧段的内外积,设当前段弧段为α,下一条弧段为β,根据内外积数学公式,外积α×β=|α|·|β|·Sin<α,β>,内积α·β=|α|·|β|·Cos<α,β>。
α×β=0,表示α、β平行,或正向或反向,然而在实际路网中,不存在直接反向掉转,因此,当α×β=0可直接归为直行;
α×β>0,表示α在β的顺时针方向,所以β是向左侧转。
α×β<0,表示α在β的逆时针方向,所以β是向右侧转。
由于tan<α,β>=α×β/α·β,当α·β≠0时,如图8所示根据tan<α,β>判断转向。实际路网往往不是很规则的直线,存在某个区段上符合某种可能的情况。具体流程如图9所示,步骤如下:
输入:两条连接弧段的三个端点t1,t2,t3。
步骤1:计算矢量t1->t2与t2->t3的内积innerp和外积outp。
步骤2:如果outp=0,则返回“直行”,否则转步骤3。
步骤3:如果outp<0,转步骤4,否则判断innerp。如果innerp=0,返回“左转”,否则计算tanp=outp/innerp。如果tanp≤-1或tanp≥1,返回“左转”;-1<tanp<0,返回“左转掉头”;0<tanp<1,转步骤5(图9中所示a)。
步骤4:判断innerp,如果innerp=0,返回“右转”,否则计算tanp=outp/innerp,如果tanp≤-1或tanp≥1,返回“右转”;-1<tanp<0,转步骤5(图9中所示a);0<tanp<1,返回“右转掉头”。
步骤5:如果前后路段同名,返回“直行”,否则判断从t2出发是否有其他弧段,如果没有,返回“直行”,否则记t2->t4转步骤6。
步骤6:求t2->t3与t2->t4的外积,如果>0,则返回“靠右”,否则返回“靠左”。
其中,步骤5和步骤6是直行范围内的特殊情况(图9中a),如“靠左”和“靠右”。实际路网中存在一种特殊情况,即“丫”字形路口,面临该类型路口时,两者都为直行路段,因此我们需要判断是“靠左直行”还是“靠右直行”,可以通过外积公式判断“丫”字形的两条岔路弧段的相对方向进行判断。
(四)举例:
跨区域路径搜索策略中,例如搜索“北京天安门”至“上海虹口区黄浦江”驾车路线。
步骤1:系统启动,加载网络图层及全国路网索引表至内存,将currentLayerP默认选择beijing。
步骤2:收到用户给出请求及四个关于点的参数,from=“天安门”,to=“黄浦江”,起点城市fromCity=“beijing”和终点城市toCity=“shanghai”。查询路径类型选择“高速”。fromCity≠toCity,因此转步骤4。
步骤4:进行跨区域异构路网查询。首先从全国路网索引结构表中查询北京至上海(ID=beijing-shanghai)的跨城市路径及对应的城市出口点坐标值fromP(“上海/静海/G020京沪高速入口”)、入口点坐标值toP(“南北高架路出口”)。跨城市路径最为第二段路径secondroute。
步骤5:调用单城市路径查询接口。将currentLayerP指向beijing图层,查询从from至fromP之间的最短路径,作为最终结果的第一段路径firstroute。
步骤6:调用单城市路径查询接口。将currentLayerP指向shanghai图层,查询从toP至to之间的最短路径,作为最终结果的第三段路径thirdroute。
步骤7:返回三段路径(firstroute+secondroute+thirdroute),即成为跨城市自驾车行驶导引结果。
对于导航路径文字描述算法,以上海市内车辆路径导航结果进行计算。导航结果如图10所示,文字描述结果是:
“1)进入中山东二路向东南1.1公里;
2)直行中山南路向东南1.5公里;
3)靠右向西南913米;
4)左转南浦大桥向东南2公里;
5)左转向东北1.4公里;
6)直行浦东南路向西南582米;
7)左转南码头路向南1.5公里到达。”
按照文字描述转化算法,我们的输入为矢量线数组,输出为如上文字描述。具体流程如下:
步骤1:初始化str=“”,cost=0,index=1,name=edges[0]->getName()=“中山东二路”,转步骤2。
步骤2:判断name不为空,则str+=“1)进入”+name=“1)进入中山东二路”,转步骤3。
步骤3:调用edges[0]的getCost()获得cost=139.3,getDirection()如下,用方向角算法,其弧段的两端点坐标为t1:[″121.492997″,″31.231958″],t2:[″121.49346″,″31.231524″]。则
步骤1):计算dx=t2.x-t1.x=121.49346-121.492997=0.000463,dy=t2.y-t1.y=31.231524-31.231958=-0.000434。
步骤2):dx不等于0,转步骤3。
步骤3):dx>0,计算d=dy/dx=-0.000434/0.000463=-0.9373。因为-2.747<d<-0.364,所以返回“东南”。
即<Direction>=“东南”,因此str+=“向”+<Direction>,str=“1)进入中山东二路向东南”,和转步骤4。
步骤4:判断edges还有弧段,获取edges的下一条弧段edges[1],调用getTurn()方法获取该弧段<Turning>。利用转向角算法,连接edges[0]及edges[1]的三个端点t1:[″121.492072″,″31.232931″],t2:[″121.492997″,″31.231958″],t3:[″121.49346″,″31.231524″]。
步骤1):步骤1:计算矢量t1->t2与t2->t3的内积
innerp=(t2.x-t1.x)*(t3.x-t2.x)+(t3.y-t2.y)*(t2.y-t1.y)
=(121.492997-121.492072)*(121.49346-121.492997)+(31.231524-31.231958)*(31.231958-31.232931)
=0.000000850557和外积
outp=(t2.x-t1.x)*(t3.y-t2.y)-(t3.x-t2.x)*(t2.y-t1.y)
=(121.492997-121.492072)*(31.231524-31.231958)-(121.49346-121.492997)*(31.231958-31.232931)
=0.000000049049。
判断edges[i]->getName()是否等于edges[i-1]->getName(),如果相等,则cost+=edges[i]->getCost(),否则转步骤5。
步骤2):outp>0,转3。
步骤3):因为innerp>0,计算
tanp=outp/innerp
=0.000000049049/0.000000850557
=0.0576669。由于0<tanp<1,转5。
步骤5):前后路段同名,返回“直行”。
判断edges[1]->getName()等于edges[0]->getName(),则cost+=edges[1]->getCost()=139.3+153.2=292.5,转步骤4。
以下路段类似举例,不再累述。
对于转向角算法,再举一例,如3)中“靠右向西南913米”,输入两条连接弧段的三个端点t1:[″121.509874″,″31.203728″],t2:[″121.511563″,″31.203089″],t3:[″121.514867″,″31.204264″]。
步骤1:计算矢量t1->t2与t2->t3的内积
innerp=(t2.x-t1.x)*(t3.x-t2.x)+(t3.y-t2.y)*(t2.y-t1.y)
=(121.511563-121.509874)*(121.514867-121.511563)+(31.204264-31.203089)*(31.203089-31.203728)
=0.00000482963和外积
outp=(t2.x-t1.x)*(t3.y-t2.y)-(t3.x-t2.x)*(t2.y-t1.y)
=(121.511563-121.509874)*(31.204264-31.203089)-(121.514867-121.511563)*(31.203089-31.203728)
=0.00000409583。
步骤2:outp>0,转3。
步骤3:因为innerp>0,计算
tanp=outp/innerp
=0.00000409583/0.00000482963
=0.848063。由于0<tanp<1,转5。
步骤5:前后路段不同名,并发现有从t2出发的另一条弧段,获得t4:[″121.5104345″,″31.210234″],转6。
步骤6:求t2->t3与t2->t4的外积
(t3.x-t2.x)*(t4.y-t2.y)-(t4.x-t2.x)*(t3.y-t2.y)
=(121.514867-121.511563)*(31.210234-31.203089)-(121.5104345-121.511563)*(31.204264-31.203089)
=0.0000249331,大于0,则返回“靠右”。
其他路段均按照以上方法可得。
本领域的技术人员在不脱离权利要求书确定的本发明的精神和范围的条件下,还可以对以上内容进行各种各样的修改。因此本发明的范围并不仅限于以上的说明,而是由权利要求书的范围来确定的。
Claims (8)
1.一种跨区域路径搜索方法,其特征在于,包括:
步骤1,加载全国路网索引表以及常用的网络图层至内存;全国路网索引表中包含起点城市的名称、终点城市的名称、起点城市的出口、终点城市的入口、起点城市的出口的坐标、终点城市的入口的坐标以及起点城市和终点城市之间的路径类型;
步骤2,根据起点名称和终点名称判断起点城市或终点城市是否已被加载到内存,如果没有,将相应的网络图层加载到内存;起点名称包括起点城市以及在该起点城市中的具体位置,终点名称包括终点城市以及在该终点城市中的具体位置;起点城市和终点城市不同;
步骤3,从全国路网索引表中查询起点城市和终点城市之间的路径类型、起点城市对应的城市出口点的坐标和终点城市的对应的城市入口点的坐标,得到第二段路径;
步骤4,查询起点城市中从该起点城市中的具体位置到对应的城市出口点的最短路径,得到第一段路径;
步骤5,查询终点城市中从对应的城市入口点到该终点城市中的具体位置的最短路径,得到第三段路径;
步骤6,返回第一段路径、第二段路径和第三段路径作为跨区域路径搜索结果;
步骤7,获取跨区域路径搜索结果中顺次连接的第一弧段和第二弧段的名称、方向和长度;
步骤8,如果第一弧段的名称和第二弧段的名称相同,则记录并显示第一弧段或第二弧段的方向以及第一弧段的长度与第二弧段的长度之和;
如果第一弧段的名称和第二弧段的名称不同,则记录并显示第一弧段的方向和长度,并且记录和显示第一弧段向第二弧段的转向状态以及第二弧段的方向和长度;
步骤7中,第一弧段或第二弧段的方向用方向角算法求得;
步骤8中,第一弧段向第二弧段的转向状态用转向角算法求得。
2.如权利要求1所述的跨区域路径搜索方法,其特征在于,步骤7中,第一弧段或第二弧段的方向按照下列步骤计算:
步骤71,获取第一弧段或第二弧段的两个端点的坐标(t1.x,t1.y)和(t2.x,t2.y);
步骤72,计算dx=t2.x-t1.x,dy=t2.y-t1.y;
如果dx=0且dy>0,则方向为“北”;如果dx=0且dy<0,则方向为“南”;
如果dx>0,计算d=dy/dx:
如果d>2.747,则方向为“北”;
如果0.364<d<2.747,则方向为“东北”;
如果-0.364<d<0.364,则方向为“东”;
如果-2.747<d<-0.364,则方向为“东南”;
如果d<-2.747,则方向为“南”;
如果dx<0,计算d=dy/dx:
如果d>2.747,则方向为“南”;
如果0.364<d<2.747,则方向为“西南”;
如果-0.364<d<0.364,则方向为“西”;
如果-2.747<d<-0.364,则方向为“西北”;
如果d<-2.747,则方向为“北”。
3.如权利要求1所述的跨区域路径搜索方法,其特征在于,步骤8中,第一弧段向第二弧段的转向状态依据下列步骤计算:
步骤81,获取第一弧段和第二弧段的三个端点的坐标(t1.x,t1.y)、(t2.x,t2.y)和(t3.x,t3.y)和从t2出发的另一弧段的端点坐标(t4.x,t4.y)
步骤82,计算矢量(t1.x,t1.y)->(t2.x,t2.y)与矢量(t2.x,t2.y)->(t3.x,t3.y)的内积innerp和外积outp:
如果outp=0,则转向状态为“直行”;
如果outp<0,并且innerp=0,则转向状态为“右转”;如果outp<0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则转向状态为“右转”;0<tanp<1,则转向状态为“右转掉头”;如果-1<tanp<0,并且第一弧段和第二弧段同名,则转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,且不存在从(t2.x,t2.y)出发的其他弧段,则转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则转向状态为“靠右”,如果该外积小于0,则转向状态为“靠左”;
如果outp>0,并且innerp=0,则转向状态为“左转”;如果outp>0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则转向状态为“左转”;如果-1<tanp<0,则转向状态为“左转掉头”;如果0<tanp<1,并且第一弧段和第二弧段同名,则转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且不存在从(t2.x,t2.y)出发的其他弧段,则转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则转向状态为“靠右”,如果该外积小于0,则转向状态为“靠左”。
4.如权利要求1-3任意一项所述的跨区域路径搜索方法,其特征在于,第一弧段、第二弧段的长度或第一弧段的长度与第二弧段的长度之和大于或等于1000米,则换算为公里进行显示。
5.一种跨区域路径搜索装置,其特征在于,包括:
数据加载模块,用于加载全国路网索引表以及常用的网络图层至内存;全国路网索引表中包含起点城市的名称、终点城市的名称、起点城市的出口、终点城市的入口、起点城市的出口的坐标以及终点城市的入口的坐标;根据起点名称和终点名称判断起点城市或终点城市是否已被加载到内存,如果没有,将相应的网络图层加载到内存;起点名称包括起点城市以及在该起点城市中的具体位置,终点名称包括终点城市以及在该终点城市中的具体位置;起点城市和终点城市不同;
跨区域路径获取模块,用于从全国路网索引表中查询起点城市和终点城市之间的路径类型、起点城市对应的城市出口点和终点城市的对应的城市入口点,得到第二段路径;查询起点城市中从该起点城市中的具体位置到对应的城市出口点的最短路径,得到第一段路径;查询终点城市中从对应的城市入口点到该终点城市中的具体位置的最短路径,得到第三段路径;返回第一段路径、第二段路径和第三段路径作为跨区域路径搜索结果;
参数获取模块,用于获取路径结果中顺次连接的第一弧段和第二弧段的名称、方向和长度;
文字描述模块,用于在第一弧段的名称和第二弧段的名称相同时,记录并显示第一弧段或第二弧段的方向以及第一弧段的长度与第二弧段的长度之和;在第一弧段的名称和第二弧段的名称不同时,记录并显示第一弧段的方向和长度,并且记录和显示第一弧段向第二弧段的转向状态以及第二弧段的方向和长度;
参数获取模块使用方向角算法求得第一弧段或第二弧段的方向;
文字描述模块使用转向角算法求得第一弧段向第二弧段的转向状态。
6.如权利要求5所述的跨区域路径搜索装置,其特征在于,参数获取模块,用于获取第一弧段或第二弧段的两个端点的坐标(t1.x,t1.y)和(t2.x,t2.y);计算dx=t2.x-t1.x,dy=t2.y-t1.y;
如果dx=0且dy>0,则参数获取模块获取的方向为“北”;如果dx=0且dy<0,则参数获取模块获取的方向为“南”;
如果dx>0,计算d=dy/dx:
如果d>2.747,则参数获取模块获取的方向为“北”;
如果0.364<d<2.747,则参数获取模块获取的方向为“东北”;
如果-0.364<d<0.364,则参数获取模块获取的方向为“东”;
如果-2.747<d<-0.364,则参数获取模块获取的方向为“东南”;
如果d<-2.747,则参数获取模块获取的方向为“南”;
如果dx<0,计算d=dy/dx:
如果d>2.747,则参数获取模块获取的方向为“南”;
如果0.364<d<2.747,则参数获取模块获取的方向为“西南”;
如果-0.364<d<0.364,则参数获取模块获取的方向为“西”;
如果-2.747<d<-0.364,则参数获取模块获取的方向为“西北”;
如果d<-2.747,则参数获取模块获取的方向为“北”。
7.如权利要求5所述的跨区域路径搜索装置,其特征在于,文字描述模块,用于获取第一弧段和第二弧段的三个端点的坐标(t1.x,t1.y)、(t2.x,t2.y)和(t3.x,t3.y)和从t2出发的另一弧段的端点坐标(t4.x,t4.y);计算矢量(t1.x,t1.y)->(t2.x,t2.y)与矢量(t2.x,t2.y)->(t3.x,t3.y)的内积innerp和外积outp:
如果outp=0,则文字描述模块记录并显示转向状态为“直行”;
如果outp<0,并且innerp=0,则文字描述模块记录并显示转向状态为“右转”;如果outp<0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则文字描述模块记录并显示转向状态为“右转”;0<tanp<1,则文字描述模块记录并显示转向状态为“右转掉头”;如果-1<tanp<0,并且第一弧段和第二弧段同名,则文字描述模块记录并显示转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,且不存在从(t2.x,t2.y)出发的其他弧段,则文字描述模块记录并显示转向状态为“直行”;如果-1<tanp<0,第一弧段和第二弧段不同名,存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则文字描述模块记录并显示转向状态为“靠右”,如果该外积小于0,则文字描述模块记录并显示转向状态为“靠左”;
如果outp>0,并且innerp=0,则文字描述模块记录并显示转向状态为“左转”;如果outp>0,并且innerp不为0,则计算tanp=outp/innerp;如果tanp≤-1或tanp≥1,则文字描述模块记录并显示转向状态为“左转”;如果-1<tanp<0,则文字描述模块记录并显示转向状态为“左转掉头”;如果0<tanp<1,并且第一弧段和第二弧段同名,则文字描述模块记录并显示转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且不存在从(t2.x,t2.y)出发的其他弧段,则文字描述模块记录并显示转向状态为“直行”;如果0<tanp<1,第一弧段和第二弧段不同名,并且存在从(t2.x,t2.y)出发到端点(t4.x,t4.y)的弧段,则计算矢量(t2.x,t2.y)->(t3.x,t3.y)与矢量(t2.x,t2.y)->(t4.x,t4.y)的外积,如果该外积大于0,则文字描述模块记录并显示转向状态为“靠右”,如果该外积小于0,则文字描述模块记录并显示转向状态为“靠左”。
8.如权利要求5-7任意一项所述的跨区域路径搜索装置,其特征在于,第一弧段、第二弧段的长度或第一弧段的长度与第二弧段的长度之和大于或等于1000米,则换算为公里进行显示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101268705A CN101840416B (zh) | 2010-03-16 | 2010-03-16 | 一种跨区域路径搜索方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010101268705A CN101840416B (zh) | 2010-03-16 | 2010-03-16 | 一种跨区域路径搜索方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101840416A CN101840416A (zh) | 2010-09-22 |
CN101840416B true CN101840416B (zh) | 2011-10-05 |
Family
ID=42743790
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010101268705A Active CN101840416B (zh) | 2010-03-16 | 2010-03-16 | 一种跨区域路径搜索方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101840416B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102954799A (zh) * | 2011-08-29 | 2013-03-06 | 环达电脑(上海)有限公司 | 快速路径规划的导航装置及其方法 |
CN102937451A (zh) * | 2012-11-19 | 2013-02-20 | 上海梦擎信息科技有限公司 | 基于精简地图的导航系统和方法 |
CN104537179B (zh) * | 2014-12-31 | 2016-09-14 | 广东电网有限责任公司佛山供电局 | 获取用电地址和接入点设备间最短路径的方法及系统 |
CN107544996B (zh) * | 2016-06-27 | 2019-12-03 | 高德信息技术有限公司 | 公交换乘路线的查询方法及装置 |
CN106959115A (zh) * | 2017-01-09 | 2017-07-18 | 上海趣驾信息科技有限公司 | 一种生成城市与城市之间的经过城市集合的方法及装置 |
WO2020209976A1 (en) * | 2019-04-11 | 2020-10-15 | Neighborcom, Llc | System and method associated with an insular digital content distribution platform that generates discrete epochs of content based on determination of a germane zip-span polygon region |
CN111174797B (zh) * | 2020-01-16 | 2022-10-14 | 湖南大学 | 一种封闭区域全局路径规划方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046388A (zh) * | 2006-03-31 | 2007-10-03 | 刘劲彤 | 一种基于短距离无线数字广播的导航方法 |
CN101606038A (zh) * | 2007-01-11 | 2009-12-16 | 三菱电机株式会社 | 导航装置 |
-
2010
- 2010-03-16 CN CN2010101268705A patent/CN101840416B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101046388A (zh) * | 2006-03-31 | 2007-10-03 | 刘劲彤 | 一种基于短距离无线数字广播的导航方法 |
CN101606038A (zh) * | 2007-01-11 | 2009-12-16 | 三菱电机株式会社 | 导航装置 |
Non-Patent Citations (2)
Title |
---|
张一珂等.基于车辆导航的一种改良动态最短路径算法.《科技广场》.2009,(第5期),第26-28页. * |
方金云等.基于流式渐进传输的大规模网络地形实时漫游.《系统仿真学报》.2010,第22卷(第2期),第429-434页. * |
Also Published As
Publication number | Publication date |
---|---|
CN101840416A (zh) | 2010-09-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101840416B (zh) | 一种跨区域路径搜索方法及装置 | |
Delling et al. | Faster batched shortest paths in road networks | |
CN101944095A (zh) | 路径规划方法和系统 | |
CN101650191B (zh) | 道路网络拓扑抽象的方法及装置 | |
Fuhao et al. | An algorithm of shortest path based on Dijkstra for huge data | |
CN104217579B (zh) | 基于路段子网络冗余度的交通网络关键路段搜索方法 | |
CN106225800A (zh) | 基于实时路况信息的环境友好型车辆导航路径构建方法 | |
CN104200127A (zh) | 基于道路转角权重的最优路径分析方法 | |
CN101840333B (zh) | 一种路径结果文字描述方法及装置 | |
Xiao-Yan et al. | Application of Dijkstra algorithm in logistics distribution lines | |
Bing et al. | Improvement and application of Dijkstra algorithms | |
Kong et al. | Improvement and realization of dijkstra algorithm in gis of depot | |
CN105067001A (zh) | 基于出租车经验数据的路径设置方法及系统 | |
Sun et al. | Continuous reverse nearest neighbor queries on moving objects in road networks | |
Sangaiah et al. | An investigation of Dijkstra and Floyd algorithms in national city traffic advisory procedures | |
Xia et al. | Study on real-time navigation data model based on ESRI shapefile | |
CN108427842B (zh) | 基于插值点缓冲区的电力管网管线核查方法 | |
Zhang et al. | Improve on Dijkstra shortest path algorithm for huge data | |
Yang et al. | A model of the dynamic traffic road network | |
Zhang et al. | A Study on the Distribution and Utilization of Recreational Resources Along the Grand Canal Culture Belt | |
Chen et al. | The spatial distribution of bus stations and optimization strategy in the main urban area of Lanzhou | |
Lang et al. | Research on the Stratification Process and Influencing Factors of Liaocheng Ancient City Based on the Translation of Historical Map | |
Chen et al. | A Fast Map Matching Method by Using Grid Index | |
Li et al. | Regional road network shortest path algorithm in vehicle navigation systems | |
Zhang et al. | Prediction of transportation network based on PageRank algorithm |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |