首页> 中国专利> 面向城市交通的动态路径诱导方法

面向城市交通的动态路径诱导方法

摘要

面向城市交通的动态路径诱导方法,涉及地理信息系统及智能交通系统中的多种最优路径规划方法。本发明以“美国环境系统研究所公司ESRI”提供的“地理信息系统软件产品ArcGIS”道路模型为基础,加载北京市道路交通图,仿真了PSP,Dijkstra等十二种路径规划方法在不同的道路交通状况下的运行效率,实时显示主要道路的动态交通信息,实现了动态交通流信息的表达,并将动态交通流信息成功应用于动态最优路径的计算,可以仿真不同路径规划方法在动态交通状况下的运行效率。本原型系统属于交通运输领域,可以应用于智能交通、车辆导航、地理信息系统最优路径规划方法的仿真实验,从而为路径诱导系统的研究提供参考和依据。

著录项

  • 公开/公告号CN102169637A

    专利类型发明专利

  • 公开/公告日2011-08-31

    原文格式PDF

  • 申请/专利权人 北京大学;

    申请/专利号CN201010593086.5

  • 发明设计人 张飞舟;陈嘉;

    申请日2010-12-08

  • 分类号G08G1/0969(20060101);G01C21/34(20060101);

  • 代理机构11251 北京科迪生专利代理有限责任公司;

  • 代理人李新华

  • 地址 100871 北京市海淀区颐和园路5号

  • 入库时间 2023-12-18 03:13:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-01-25

    未缴年费专利权终止 IPC(主分类):G01C21/34 授权公告日:20130522 终止日期:20151208 申请日:20101208

    专利权的终止

  • 2013-05-22

    授权

    授权

  • 2011-10-12

    实质审查的生效 IPC(主分类):G08G1/0969 申请日:20101208

    实质审查的生效

  • 2011-08-31

    公开

    公开

说明书

技术领域

本发明涉及地理信息系统及智能交通系统中的多种最优路径规划方法,实现了动态交通流信息的表达,并将动态交通流信息成功应用于动态最优路径的计算,可以仿真不同路径规划方法在动态交通状况下的运行效率。而且,本发明实现了适用于动态交通信息大型路网的双向分层最优路径规划方法。该方法成功解决交通禁则、转向限制、单向限行等问题。

背景技术

对于一个动态路径诱导系统,一般由三部分构成:(1)交通信息控制中心,交通信息监控中心是动态路径诱导系统的主控中心,主要功能是从各种信息源获得实时的交通信息,处理并产生要发布的交通数据。(2)通信系统,负责完成车辆和交通信息中心的数据交换。控制中心通过通信系统向车载单元发送实时路阻、交通事件等信息,车载单元向控制中心反馈车速、位置等实时信息。(3)车载诱导单元,车载诱导设备主要由计算机、通信设备和车辆定位设备组成。负责车辆位置确定,与控制中心交互交通信息,提供人机界面等任务。

动态路径诱导系统的框架如图1所示。

所以针对动态路径诱导系统,动态路径规划方法、地图匹配方法、动态交通流表现、导航电子地图数据库是必不可少的部分。

发明内容

本发明所解决的问题:根据道路交通网实时变化的特点,克服现有技术的不足:交通控制中心无法提供实时的动态交通阻抗,通过人为模拟动态交通阻抗,仿真了动态路径规划方法,表现了动态变化的交通流。该方法运行效率高,可解决交通禁则、单向限行、转弯阻抗等技术问题。除此之外,本发明还改进了PSP方法,Dijkstra方法,DBFS方法,L-dequeue方法,L-2queue方法,改进的Dijkstra方法,A*方法,分层双向搜索方法等十二种路径规划方法,使之能够解决交通禁则、单向限行、转弯阻抗等技术问题。最后仿真了这些方法在不同的道路交通状况下的运行效率。

本发明采用的技术方案步骤如下:城市交通是指路网庞大、交通规则多变、交通信息瞬息万变的交通环境。技术路线如图2所示。实现步骤如下:

第一步,导航地理数据的采集与组织,包括数据采集,数据格式转换,导航数据库的建立;

第二步,实现GPS数据获取模块。利用ESRI提供的一套完整的支持GPS的方法和接口,实现从GPS端口的连接,到GPS信号在地图的显示,以及轨迹的回放;

第三步,实现地图显示模块。ArcObjects给开发者提供了多个可视化控件,如MapControl控件、PageLayoutControl控件、TOCControl控件和ToolbarControl控件等。地图的显示主要由MapControl控件完成,图层控制由TOCControl控件完成,缩放漫游等地图基本操作命令由ToolbarControl控件完成;

第四步,实现信息查询模块。充分利用ArcGIS Engine接口函数IQueryFilter和IFeatureCursor。IQueryFilter接口通过输入SQL空间查询语句返回具备指定条件的IFeatureCursor对象,再通过IFeatureCursor的NextFeature()方法即可获得要素对象;

第五步,实现动态交通流模块。在线性参考系的基础上,利用动态分段技术,实现了动态交通流的模拟;

第六步,实现路径规划模块。通过INetworkDataset接口和INetworkQuery接口获取路网连通性关系,再根据各种最短路径规划方法思路进行路径寻优。

第七步,实现动态仿真模块。

所述第六步路径规划模块的实现过程为:1)初始化道路网络接口函数INetworkDataset,INetworkElement,INetworkQuery,INetworkForwardStar。这几个函数是本发明所用路网模型的入口函数,可以提供道路网络的连通性信息;2)确定起点和目的地相应于道路网络的起讫点和起讫边;3)定义路径分析相关变量;4)初始化路径分析相关变量;5)判断搜索方式,即根据起讫点所在道路网络等级判断进行正向搜索还是逆向搜索;6)寻找u节点(已标号点);7)探测选出的节点u和u1(u为正向搜索中的已标号点,u1为逆向搜索中的已标号点);8)判断正逆向搜索是否交接,如否转步骤6继续循环,如是得到最优路径;9)绘制所述最优路径。

所述第七步动态仿真模块的实现过程为:随机发生器生成实时动态道路阻抗,将生成的动态交通阻抗写入动态交通流数据库,动态交通流模块读取动态交通流数据库中的动态交通阻抗进行动态交通流渲染,实时表现动态交通流;路径规划模块读取动态交通流数据库中的动态交通阻抗,更新动态交通阻抗信息,生成动态最优路径,如果新的路径与之前的路径相比发生较大的改变,地图显示模块重新绘制最优路径,加以显示。

本发明与现有的技术方法相比有益的效果是:

1、功能强大,如图3所示。本发明具有的功能:(1)实现双向分层动态路径规划方法,可以实时规避阻塞路段;(2)兴趣点的查询;(3)地图的漫游、缩放,图层管理等基本操作;(4)动态交通信息的表现;(5)仿真十二种路径规划方法在不同道路状况下的运行效率,包括运行时间、方法复杂度、搜索深度。

2、成功仿真了面向城市交通的动态路径规划方法,并能够表现动态交通流。所设计的双向分层路径规划方法在城市级路网上具有比ArcGIS最短路径方法更高的运行效率;可以模拟动态交通流;本发明采用ArcGIS二次开发,地图为shp格式,具有更好的扩展性。对导航软件、路径诱导系统的研究具有较好的参考价值。

本发明的系统结构如图4所示。

附图说明

图1动态路经诱导系统的框架示意图图;

图2技术路线示意图;

图3本发明的功能示意图;

图4本发明的系统结构图;

图5获得shp格式电子地图;

图6建立地理数据库Geodatabase;

图7向地理数据库的要素数据集中导入要素类;

图8道路属性表;

图9动态交通流事件表;

图10转向要素类;

图11选择网络数据集的源;

图12设置连通性规则;

图13建立网络转弯模型;

图14设置网络数据集属性;

图15生成北京市电子导航地图;

图16实现地图显示模块;

图17实现信息查询模块;

图18动态分段线数据与路径事件表一对一关联;

图19使用ArcGIS Create Routes生成路径;

图20添加路径信息;

图21设置路径参考;

图22动态分段新数据、线性参考文件、路径事件表对应关系;

图23动态交通流渲染;

图24ArcGIS几何网络和逻辑网络对应关系;

图25路径规划模块中的双向分层动态路径规划方法流程图(一);

图26路径规划模块中的双向分层动态路径规划方法流程图(二);

图27仿真模块流程图;

图28系统启动界面;

图29路径规划方法选择界面;

图30点选起讫点界面;

图31最优路径生成界面;

图32动态仿真(1);

图33动态仿真(2);

图34动态仿真(3)。

具体实施方式

准备工作:搭建开发环境与开发技术路线

面向城市交通的动态路径诱导方法采用ArcGIS Engine技术,在Visual Studio 2005.NET环境下开发。

开发环境的搭建步骤如下:

(1)下载安装Visual Studio 2005。执行安装程序,安装在默认目录下。

(2)获取ArcGIS 9.3系列软件及软件正版授权。执行License Manager安装程序,安装的默认目录下,并使用软件正版授权。重启计算机。

(3)安装ArcMap 9.3软件,选择ArcInfo,安装在默认目录下。

(4)安装ArcGIS Engine 9.3,选择C#.NET编程语言,安装在默认目录下。

(5)启动Visual Studio 2005,新建项目,从项目类型里面选择“ArcGIS Engine”,并在子菜单选择“MapControl Application”,点击确定。

(6)在“解决方案资源管理器”的子目录中选择“引用”,右键添加“ArcGIS Reference”,选择:

ESRI.ArcGIS.esriSystem;

ESRI.ArcGIS.Carto;

ESRI.ArcGIS.Controls;

ESRI.ArcGIS.ADF;

ESRI.ArcGIS.SystemUI;

ESRI.ArcGIS.Geometry;

ESRI.ArcGIS.Display;

ESRI.ArcGIS.Utility;

ESRI.ArcGIS.NetworkAnalyst;

ESRI.ArcGIS.Geodatabase;

ESRI.ArcGIS.DataSourcesFile;

ESRI.ArcGIS.DataManagementTools;

ESRI.ArcGIS.DataSourcesGDB;

至此,开发环境搭建完毕,接下来可以进行ArcGIS Engine的程序开发。

系统开发的技术路线如图1所示。

第一步:导航地理数据的采集与组织

1.1数据采集

北京市MapInfo导航电子地图:北京灵图软件技术有限公司出版的2008年北京市导航电子地图。

1.2数据格式转换

在MapInfo中,数字化后的数据以Tab格式按图层组织存储空间数据,一个图层包括不同几何类型的图形对象,但只对应一个属性表结构。Tab数据采用双数据库存储模式,属性数据存储在属性表结构文件(.Tab)与属性数据文件(.Dat)中,空间数据存储在空间数据文件(.Map)中,两者通过交叉索引文件按(.id)联系。

由于Tab数据无法用ArcGIS直接读取,需要将其转化为ArcGIS格式。ArcGIS9.3常用的数据组织方式主要有Shapefile和Geodatabase。Shapefile有存储空间数据的shape文件、存储属性数据的dBase表和存储空间数据和属性数据关系的shx文件组成。Geodatabase是ArcGIS数据模型发展的第三代产物,它是面向对象的数据模型,能够表示要素的自然行为和要素之间的关系。

通过MapInfo菜单命令“转入与转出”,将MapInfo格式的导航电子地图转换为ArcGIS格式。

操作步骤:在工具栏中选择“表”→“转出”→选择需要转换格式的图层的名称→点击“确定”→选择转出表的存储路径和转出格式→“保存”。

按照此方法将每个图层都进行格式转换,供以后的程序读取使用。

这样,就得到了ArcGIS格式基础数据,如图5所示。

1.3导航地理数据库的建立

A建立Geodatabase

在ArcCatalog树中选择一个文件夹,右键,单击New,选择“File Geodatabase”,输入地理数据库的名称“PKU-TestMap”,完成数据库的建立,这时该数据库是不包含任何内容的空Geodatabase,如图6所示。

B建立数据库中的基本组成项

建立要素数据集

在ArcCatalog目录树中,在刚才建立的Geodatabase上单击右键,单击New,选择“Feature Dataset”命令。在弹出的对话框中输入要素数据集的名称“BJ_PekingMap”,单击“Edit”,进入“Coordinate System”选项卡,单击“Import”,选择“Road.shp”文件,将要素数据集的坐标系统定义为导航电子地图的坐标系统。

进入X/Y Domain选项卡和Z Domain选项卡,输入数据库所需最大最小值及精度。

单击“OK”完成操作。

导入要素类

在ArcCatalog目录树中,在刚才建立的要素数据集上单击右键,单击Import,选择“Feature Class(multiple)”。在“Input Class”中选择前面转换好的ArcGIS格式导航基础数据,如图7所示。

点击“OK”,完成导入。

修改道路属性表

在ArcMap中打开所建数据库要素数据集中的“Road_Peking”要素类。打开并按照下表设计的路网数据表编辑该要素类的属性表。

表1 道路网路数据表

编辑好的道路属性表如图8所示。

创建动态交通流属性表

提取“Road_Peking”要素类中道路等级“Grade<=1”的道路要素,将其存储于数据集“BJ_PekingMap”中,命名为“DynamicFlow_Peking”,作为动态交通流表现图层。

将“DynamicFlow_Peking”的属性表导出为Table表格,存储于地理数据库PKU-TestMap中,命名为“TrafficFlowInfo_PekingMap”,作为动态交通流事件表。按照表2设计的动态交通流事件表进行编辑。

表2 动态交通流事件表

完成后的动态交通流事件表如图9所示。

创建转向要素类Turn Feature Class

在ArcCatalog目录树中,右键单击地理数据库“PKU-TestMap”中的数据集“BJ_PekingMap”,单击New,选择“Feature Class”命令。在弹出窗口中填入名称并选择Feature Type为“Turn”,点击“OK”。

在ArcMap的编辑模式下编辑该类,确定转向的阻抗。完成后如图10所示:

TimeIMP字段如为-1,则代表禁止该转向行为,如为10,则代表该转向的阻抗为10。

C建立ArcGIS网络数据集

ArcGIS网络数据集是ArcGIS路网模型的承载,反映了路网之间的连通性关系,是进行路径规划的基础。

(1)在ArcCatalog目录树中,右键单击地理数据库“PKU-TestMap”中的数据集“BJ_PekingMap”,单击New,选择“Network Dataset”命令。这将打开新建网络数据集向导。

(2)设定数据集的名称。

(3)选择参与网络数据集的源。选择道路要素类和连接点要素类,使之成为网络数据集的两个源。如图11所示。

(3)设置连通性规则。网络的连通性定义了网络中要素之间的连接关系。道路要素类拥有三个子类,我们利用这三个子类来建立高速公路,主要道路和地方街道的连通性。

对于这个网络,高速公路和主要道路相互连接,连通规则为端点连通。地方街道的连通规则为几何任意节点连通。因此修改连通规则如12所示:

(4)建立网络转弯模型。选择复选框Turns,。

Arcgis在基于空间数据库的网络中支持turns。拐弯信息(比如转弯限制和延迟)增强了网络分析的性能。我们可以使用转弯要素。如果选择默认的全球转弯限制,则所有的左转弯延迟为15s。这样的规则使得右转弯更易被人们选择。全球转弯的好处是你不需要创建应用于网络中每个转弯的转弯要素规则。如图13所示。

(5)设置网络数据集属性。进入网络数据集的属性设置界面,网络数据集的属性就是进行网络分析用到的阻抗。

这里默认添加了两个属性,Oneway和Minutes。Arcgis网络分析检查到所有的源,并自动给这两个属性分配值。点击Evaluators检查源分配给两个属性的值,并进行更改。在Minutes属性页,修改Turn要素的属性,如图14所示。

可以自己添加一个属性Length,以进行距离最短分析。点击Add,添加属性。添加一个Length属性。

(6)完成设置,生成网络数据集。

1.4导航电子地图的生成

在ArcMap9.3中加载地理数据库“PKU-TestMap”数据集“BJ_PekingMap”中的图层:

BJ_PekingMap_ND_Junctions:交汇点图层;

BJ_PekingMap_ND:网络数据集图层,反映道路数据的逻辑关系;

Turns_Peking:交叉口图层;

POI_Peking:兴趣点图层,主要是大众感兴趣的点位信息,如商场、宾馆、超市、ATM取款机等。

HighRoad_Peking:高速公路及城市快速路图层;

MiddleRoad_Peking:城市主干道图层;

LowRoad_Peking:城市支路图层;

LowestRoad_Peking:里、弄、巷图层;

LanduseRegion_Peking:土地利用图层,主要是一些特殊区域,如水系、绿地等,用于渲染地图;

StreetRegion_Peking:居民街区图层,表现居民点和建筑区域,用于渲染图层;

Adm_Peking:行政区划图层,主要是全国范围的省市区域边界。

将以上图层归类为两个组图层,道路网络层和地图渲染层。经过渲染、分类等地图处理,形成北京导航电子地图,保存为mxd格式文档。形成的地图如图15所示:

第二步:GPS数据获取及处理模块的实现

在ArcGIS9.4中,ESRI提供了一套完整的支持GPS的方法和接口:从GPS端口的连接,到GPS信号在地图的显示,以及轨迹的回放等等。AO的GPS模块位于Carto类库的GPS Support部分中。

2.1GPS数据的获取

在ArcGIS的GPS模块中,最重要的类是RealTimeFeedManager,通过这个类,可以实时的处理从GPS设备发送过来的数据或者从一个FeatureClass读出数据模拟轨迹。使用GpsFeed和GpsConnection连接GPS设备,使用RealTimeFeedSimulator类来实现轨迹的回放或者从合适的数据中模拟GPS轨迹。

通过RealTimeFeedManageer获取GPS信息,比如经纬度、高程、速度等。该类提供的IGpsDisplayProperties可以用来定制定位点。该接口的ShowCurrentPosition打开或关闭当前位置或轨迹的各种属性,比如经纬度,方位,速度。还可以设置最大最小高程以及高程表示符号的最大最小值。表示速度的符号通过SpeedColorRamp进行设置。RealTimeFeedManager提供方法来刷新和清除GPS轨迹。

2.2GPS点的渲染

可以使用IPositionTrails显示GPS轨迹,轨迹可以用一系列的标记点来表示,或者用线来表示。通过ShowMarkerTrails和ShowLinearTrails的开关属性来控制是否显示轨迹。

2.3GPS位置信息的保存

还可以使用IRealTimelog接口提供的方法StartLogging和StopLogging将位置存放在一个FeatureClass中。

2.4地图匹配

如果希望将当前的GPS位置匹配到某个图层,可以使用IRealTimeFeedSnap。可以设置匹配距离,匹配到那个图层,是匹配到节点、线、或者顶点。

除了使用ArcGIS提供的匹配方法,还可以自己写方法实现地图匹配过程,这里不再赘述。

第三步:地图显示模块的实现

主要实现了如全屏显示、无极缩放、漫游、动态标记、分层显示、距离量算、鹰眼功能等。

ArcObjects给开发者提供了多个可视化控件,如MapControl控件、PageLayoutControl控件、TOCControl控件和ToolbarControl控件等。地图的显示主要由MapControl控件完成,图层控制由TOCControl控件完成,缩放漫游等地图基本操作命令由ToolbarControl控件完成。

使用MapControl控件的LoadMxFile方法载入mxd地图文档。再使用TOCControl控件的SetBuddyControl方法,即可完成图层控制模块和地图显示模块的交互。

本系统还实现了地图的鹰眼功能,即鸟瞰图。该功能的基本思路是:利用两个MapControl控件载入相同的地图文件,鹰眼图显示比例尺较小,主视图显示比例尺较大,将主视图的视图边界画在鹰眼视图中,当主视图进行重绘时鹰眼视图中的主视图边框进行重绘,当鹰眼视图中的主视图边框大小和区域发生改变时,主视图按照鹰眼视图中的边框大小进行重绘。

实现后图16所示:

第四步:信息查询模块的实现

充分利用Arc GIS Engine接口函数IQueryFilter和IFeatureCursor。IQueryFilter接口通过输入SQL空间查询语句返回具备指定条件的IFeatureCursor对象,再通过IFeatureCursor的NextFeature()方法即可获得要素对象。主要代码如下所示:

String WhereClause=″NAME LIKE’%″+textBox2.Text+″%’″;

//构造查询条件

pQueryFilter=new QueryFilterClass();

pQueryFilter.WhereClause=pString;

pQueryFilter.SubFields=″NAME″;

pFeatureCursor=pFeatureClass.Search(pQueryFilter,false);

pFeature=pFeatureCursor.NextFeature();

while(pFeature!=null)

{

StartAndEndPoints.Items.Add(pFeature.get_Value(name));

pFeature=pFeatureCursor.NextFeature();

}

完成后的信息查询模块如图17所示:

第五步:动态交通流模块的实现

本系统在线性参考系的基础上,利用动态分段技术,实现了动态交通流的模拟。具体实现步骤如下:

5.1制作路径事件表

事件表可以是ArcGIS所支持的任何形式的表格,如INFO表格,dBASE表格,Geodatabase表格,边界坐标文本文件以及通过对象链接与嵌入连接的各种数据库管理系统(DBMS)表格等。

线事件

线事件描述路径上的某一个部分。线性事件用两个值(两个端点的端点值)来描述他们的位置。必须有的字段:关联字段(ID),FROM_M,TO_M,要显示的字段(TrafficDensity)。

地理数据库“PKU-TestMap”中的表格“TrafficFlowInfo_PekingMap”,即为这里所需要的路径事件表。

5.2导入要建立动态分段的线数据文件

地理数据库“PKU-TestMap”要素数据集“BJ_PekingMap”中的要素类“DynamicFlow_Peking”即为要建立动态分段的线数据文件。

5.3生成路径-线性参照系

要建立动态分段的线数据文件“DynamicFlow_Peking”属性表中字段“FID_1”与路径事件表“TrafficFlowInfo_PekingMap”中字段“FID_1”实现一对一的关联,如图18所示。

使用ArcToolBox中的Create Routes模块,生成路径,具体操作如图19所示:

点击OK完成。生成路径文件,即动态分段基于的线性参照系文件“DynamicFlow_Peking_CreRoute”。

5.4添加路径事件动态分段

在ArcMap中打开导航电子地图BJ_Peking.mxd,选择Tools菜单栏的“Add Route Events”命令,如图20所示。

在弹出对话框中,Rout Reference代表动态分段基于的线性参照系文件,Event Table代表路径事件表,线性参照系文件和路径事件表通过Route Identifier联系起来。如图21所示。

动态分段线数据文件(DynamicFlow_Peking),线性参照系文件(DynamicFlow_Peking_CreRoute),路径事件表(TrafficFlowInfo_PekingMap)通过FID_1字段关联,如图22所示。

点击OK完成,

5.5分段渲染

使用ArcGIS渲染工具将分段数据进行渲染,渲染后的导航图即可反应动态交通流,如图23所示。

第六步:路径规划模块的实现

本系统实现了包括ArcGIS最优路径方法在内的13种最优路径方法,都有PSP方法,Dijkstra方法,DBFS方法,L-dequeue方法,L-2queue方法,改进的Dijkstra方法,A*方法,双向搜索方法,分层双向搜索方法,动态双向分层方法等。

在ArcGIS Engine中,对象库已经将最优路径方法封装,使用时,先读入建好的网络数据集(主要用到IFeatureWorkspace接口,然后创建网络分析环境(主要用到INAContext接口),下来将最短路径分析所用的经历点映射到路网上(主要用到INAClassLoader接口),最后只需调用Solve模块,即可实现最优路径分析。

如要实现其他最优路径方法,则需利用ArcGIS路网拓扑自行编写。本系统中其他路径规划方法均是通过这种方式实现。基本思路是通过INetworkDataset接口和INetworkQuery接口获取路网连通性关系,再根据各种路径规划方法的思路进行路径寻优。限于篇幅,这里不再一一阐述其实现过程。下面,将着重阐述动态双向分层最优路径方法的实现思路。

在下述方法描述中,根据ArcGIS路网模型,在2.4.2节的基础上,扩展图的定义为,N=(V,A,a,t)是一个有向图,其中V是点集,即所有节点的集合;是有序点对——弧的集合;a是定义于A上的一个单值实函数,a(i,j)表示弧(i,j)的费用;t是定义于A上的一个单值函数,t(i,j,k)表示弧(i,j)到弧(j,k)的转向费用。

优化后的最优路径诱导方法具体描述如下:

1)初始化网络接口函数。

初始化INetworkDataset,INetworkElement,INetworkQuery,INetworkForwardStar等函数。INetworkDataset是ArcGIS路网数据集接口函数,通过该接口可以获得ArcGIS路网数据集的属性信息。INetworkElement提供一些函数处理网络元素之间的转换和查询等操作。INetworkQuery和INetworkForwardStar提供一些函数来查询路网模型中点与点、点与边、边与边、边与转弯要素之间的邻接信息等操作(如与某条边相连的节点,与某个节点相连的边,与某条边相连的转弯要素等信息),还提供一些函数来获得网络中的元素(节点、弧段、转弯要素)的状态和权重信息(可以根据行车的方向性取不同方向的权)。

2)确定起讫交叉节点和起讫边。

确定起点交叉节点和起点边(StartNetworkJunction和StartNetworkEdge)和终点交叉节点和终点边(EndNetworkJunction和EndNetworkEdge)。经典的Dijkstra没有考虑到边的方向性,所以只要求起点和终点的信息就足够了,但在实际交通网络中,车辆最优路径规划是有方向性的(即车辆始终是在道路的右边行驶)。所以必须增加方向性信息(即起点边和终点边)。

ArcGIS几何网络和逻辑网络对应关系如下图所示,每条实际道路对应的逻辑道路分为“沿着数字化方向道路边”和“逆着数字化方向道路边”两条。如图24所示。

起讫交叉节点和起讫边的选择方法:

A.利用AE的INALocator接口函数将起点StartPoint和终点StopPoint映射到道路网络上,得到起点NALocation对象和终点NALocation对象,该对象反映了起讫点对应于逻辑路网的具体位置。通过NALocation对象得到起讫点对应逻辑路网上的网络边要素,以及起讫点在网络边要素上的位置。

B.通过INetworkQuery接口函数获得起始网络边要素对应的两个节点FromJunction和ToJunction,分别计算两节点距离StopPoint的距离。选择距离近的交汇点作为StartNetworkJunction。

C.通过INetworkQuery接口函数获得终止网络边要素对应的两个节点FromJunction和ToJunction,分别计算两节点距离StartPoint的距离。选择距离近的交汇点作为EndNetworkJunction。

D.如起点NALocation的Side属性为esriNAEdgeSideLeft(表明起点在起点网络边的左边),则使用INetworkEdge的QueryEdgeInOtherDirection方法,得到起始网络边的逆向边,将其作为StartNetworkEdge。

如起点NALocation的Side属性为esriNAEdgeSideRight(表明起点在起点网络边的右边),则将起始网络边作为StartNetworkEdge。

E.如终点NALocation的Side属性为esriNAEdgeSideLeft(表明起点在起点网络边的左边),则使用INetworkEdge的QueryEdgeInOtherDirection方法,得到终止网络边的逆向边,将其作为StartNetworkEdge。

如终点NALocation的Side属性为esriNAEdgeSideRight(表明起点在起点网络边的右边),则将终止网络边作为StartNetworkEdge。

通过以上五步,确定了起点交叉节、和起点边(StartNetworkJunction、StartNetworkEdge)和终点交叉节点、终点边(EndNetworkJunction、EndNetworkEdge)。

有了交通路网模型中的这四个要素,便可以进行最优路径分析了。

3)定义路径分析相关变量。

定义二维数组[,]m_lPt和[,]m_lPt1,用于存储最优路径的遍历点和遍历边。m_lPt[i,0]代表正向搜索中指向节点i那条弧的首节点ID,m_lPt[i,1]代表正向搜索中指向节点i那条弧的ID。m_lPt1[i,0]代表逆向搜索中指向节点i那条弧的首节点ID,m_lPt1[i,1]代表逆向搜索中指向节点i那条弧的ID。

定义二维数组[,]DynamicCost,用于存储道路阻抗。DynamicCost[ID,0]代表正向网络边的道路阻抗,DynamicCost[ID,1]代表逆向网络边的道路阻抗。

定义启发函数数组[]m_fei和[]m_fei1,用于存储路径搜索中所预测的每一点到终点的费用。[]m_fei为正向搜索启发函数数组,[]m_fei1为逆向搜索启发函数数组。

定义数组[]m_lLen和[]m_lLen1,用于存储起点r到每一节点i的费用。m_lLen[i]代表正向搜索中起点r到每一节点i的费用,m_lLen1[]代表逆向搜索中终点r’到每一节点i的费用。

定义数组[]m_NOW和[]m_NOW1,用于存储“未标号点集”NOW集合中点的ID,同样,[]m_NOW代表正向搜索,[]m_NOW1代表逆向搜索。

定义数组[]m_NEXT和[]m_NEXT1,用于存储“已标号点集”NEXT集合中点的ID,同样,[]m_NEXT代表正向搜索,[]m_NEXT1代表逆向搜索。

定义整形变量k,表示循环次数,即搜索深度。Φ为空集;∞为无穷大。

定义整形变量StartGrade和ToGrade,表示正向搜索起始道路的道路等级和逆向搜索起始道路的道路等级。

定义整型变量MaxGrade,MaxGrade1,MaxGrade代表正向搜索时只在比MaxGrade更高级或等级相同的道路网络上进行搜索,MaxGrade1代表逆向搜索时只在比MaxGrade1更高级或等级相同的道路网络上进行搜索。

定义变量distance,用于存储路径搜索过程中正向搜索当前搜索点和逆向搜索当前搜索点之间的直线距离。

定义整型变量m_bforward,用于表示搜索方式。

定义布尔型变量doubleway,用于表示搜索方向,真为正向搜索,假为逆向搜索。

定义整型变量u,v,u1,v1,u代表正向搜索中的已标号点ID,v代表正向搜索中的未标号点ID,u1代表逆向搜索中的已标号点ID,v1代表逆向搜索中的未标号点ID。

定义DoneID,代表正向搜索和逆向搜索的交会节点ID。

4)初始化路径分析变量。

对所有i∈V,m_lPt[0,i]=0,m_lPt1[0,i]=0,

m_lPt[1,i]=0,m_lPt1[1,i]=0;

对所有i∈V且i≠r,m_lLen[i]→∞,m_lLen1[i]→∞;

m_lLen[r]=0,m_lLen1[r′]=0;m_fei[i]=0,m_fei1[i]=0;

k=0;m_NOW={r},m_NOW1={r′};m_NEXT=Φ,m_NEXT1=Φ;

5)判断搜索方式

若StartGrade>ToGrade(起点的道路等级低于终点),从起点开始搜上一级路网,记m_bforward=0;

若StartGrade<ToGrade(起点的道路等级高于终点),从终点开始搜上一级路网,记m_bforward=1;

若StartGrade=ToGrade

若StartGrade=ToGrade=2且distance<4000,

或StartGrade=ToGrade=1且distance<8000,

或StartGrade=ToGrade=0且distance<12000,

直接在当前层进行双向搜索,直至找到最优路径,记m_bforward=3;

否则,在当前层双向搜索上一级道路,记m_bforward=2;

否则,直接在当前层(即最高层路网)进行双向搜索,直至找到最优路径,记m_bforward=3;

6)寻找u节点和u1节点(已标号点)

从点集m_NOW中选出一点,

若m_NOW=Φ或m_NOW1=Φ,则出错;

若m_bforward=0,

[从m_NOW中选一点记为u,使其具有最小费用,满足:

m_fei[u]+m_lLen[u]=min{m_fei[i]+m_lLen[i]},其中任意i∈m_NOW;

从m_NOW中删去u;

m_NEXT=m_NEXT∪{u};

若u∈m_NEXT1,则DoneID=u,转步骤8;

若u=EndJunctionID,则转步骤8];

若m_bforward=1,

[从m_NOW1中选一点记为u1,使其具有最小费用,满足:

m_fei1[u1]+m_lLen1[u1]=min{m_fei1[i]+m_lLen1[i]},对于任意i∈m_NOW1;

从m_NOW1中删去u1;

m_NEXT1=m_NEXT1∪{u1};

若u1∈m_NEXT,则DoneID=u1,转步骤8;

若u1=StartJunctionID,则转步骤8];

若m_bforward=2或m_bforward=3,

若k%15=0,doubleway=!doubleway(变换搜索方向);

若doubleway为真,正向搜索

[从m_NOW中选一点记为u,使其具有最小费用,满足:

m_fei[u]+m_lLen[u]=min{m_fei[i]+m_lLen[i]},其中任意i∈m_NOW;

从m_NOW中删去u;

m_NEXT=m_NEXT∪{u};

若u∈m_NEXT1,则DoneID=u,转步骤8;

若u=EndJunctionID,则转步骤8];

若doubleway为假,逆向搜索

[从m_NOW1中选一点记为u1,使其具有最小费用:

m_fei1[u1]+m_lLen1[u1]=min{m_fei1[i]+m_lLen1[i]},其中任意i∈m_NOW1;

从m_NOW1中删去u1;

m_NEXT1=m_NEXT1∪{u1};

若u1∈m_NEXT,则DoneID=u1,转步骤8;

若u1=StartJunctionID,则转步骤8];

7)探测选出的节点u和u1

记Au={v|(u,v)∈A},Au1={v1|(u1,v1)∈A}

若m_bforward=0,

获得指向u节点的边的道路等级TempRoadGrade;

若TempRoadGrade>min{(u,Au).RoadGrade}

StartGrade=MaxGrade=min{(u,Au).RoadGrade};

对所有v∈Au且(u,Au).RoadGrade<=MaxGrade的v执行:

若v∈m_NOW

则[若m_lLen[u]+DynamicCost(u,v)+t(u,v,k)<m_lLen[v]

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;]]

若v∈m_NEXT

则[若m_lLen[u]+DynamicCost(u,v)+t(k,u,v)<m_lLen[v]

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_NOW=m_NOW∪{v};

从m_NEXT中删去v]];

vm_NOWvm_NEXT

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_fei[v]=distance(v,EndJuction);

m_NOW=m_NOW∪{v}];

若m_bforward=1,

获得指向u1节点的边的道路等级TempRoadGrade;

若TempRoadGrade>min{(u1,Au1).RoadGrade}

ToGrade=MaxGrade1=min{(u1,Au1).RoadGrade};

对所有v1∈Au1且(u1,Au1).RoadGrade<=MaxGrade1的v1执行:

若v1∈m_NOW1

则[若m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1)<m_lLen1[v1]

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt1[v1,0]=u1;

m_lPt1[v1,1]=(u1,v1).ID;]]

若v1∈m_NEXT1

则[若m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1)<m_lLen1[v1]

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt1[v1,0]=u1;

m_lPt1[v1,1]=(u1,v1).ID;

m_NOW1=m_NOW1∪{v1};

从m_NEXT1中册去v1]];

vm_NOWvm_NEXT

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_fei[v]=distance(v,EndJuction);

m_NOW=m_NOW∪{v}];

若m_bforward=2,

若doubleway为真,正向搜索[

获得指向u节点的边的道路等级TempRoadGrade;

若TempRoadGrade>min{(u,Au).RoadGrade}

StartGrade=MaxGrade=min{(u,Au).RoadGrade};

对所有v∈Au且(u,Au).RoadGrade<=MaxGrade的v执行:

若v∈m_NOW

则[若m_lLen[u]+DynamicCost(u,v)+t(u,v,k)<m_lLen[v]

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;]]

若v∈m_NEXT

则[若m_lLen[u]+DynamicCost(u,v)+t(k,u,v)<m_lLen[v]

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_NOW=m_NOW∪{v};

从m_NEXT中删去v]];

vm_NOWvm_NEXT

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_fei[v]=distance(v,EndJuction);

m_NOW=m_NOW∪{v}]];

若doubleway为假,逆向搜索[

获得指向u1节点的边的道路等级TempRoadGrade;

若TempRoadGrade>min{(u1,Au1).RoadGrade}

ToGrade=MaxGrade1=min{(u1,Au1).RoadGrade};

对所有v1∈Au1且(u1,Au1).RoadGrade<=MaxGrade1的v1执行:

若v1∈m_NOW1

则[若m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1)<m_lLen1[v1]

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt1[v1,0]=u1;

m_lPt1[v1,1]=(u1,v1).ID;]]

若v1∈m_NEXT1

则[若m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1)<m_lLen1[v1]

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt1[v1,0]=u1;

m_lPt1[v1,1]=(u1,v1).ID;

m_NOW1=m_NOW1∪{v1};

从m_NEXT1中删去v1]];

vm_NOWvm_NEXT

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_fei[v]=distonce(v,EndJuction);

m_NOW=m_NOW∪{v}]];

若m_bforward=3,

MaxGrade=StartGrade=ToGrade;

若doubleway为真,正向搜索[

对所有v∈Au且(u,Au).RoadGrade<=MaxGrade的v执行:

若v∈m_NOW

则[若m_lLen[u]+DynamicCost(u,v)+t(u,v,k)<m_lLen[v]

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;]]

若v∈m_NEXT

则[若m_lLen[u]+DynamicCost(u,v)+t(k,u,v)<m_lLen[v]

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_NOW=m_NOW∪{v};

从m_NEXT中删去v]];

vm_NOWvm_NEXT

则[m_lLen[v]=m_lLen[u]+DynamicCost(u,v)+t(k,u,v);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_fei[v]=distance(v,EndJuction);

m_NOW=m_NOW∪{v}]];

若doubleway为假,逆向搜索[

对所有v1∈Au1且(u1,Au1).RoadGrade<=MaxGrade1的v1执行:

若v1∈m_NOW1

则[若m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1)<m_lLen1[v1]

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt1[v1,0]=u1;

m_lPt1[v1,1]=(u1,v1).ID;]]

若v1∈m_NEXT1

则[若m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1)<m_lLen1[v1]

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt1[v1,0]=u1;

m_lPt1[v1,1]=(u1,v1).ID;

m_NOW1=m_NOW1∪{v1};

从m_NEXT1中删去v1]];

vm_NOWvm_NEXT

则[m_lLen1[v1]=m_lLen1[u1]+DynamicCost(u1,v1)+t(k1,u1,v1);

m_lPt[v,0]=u;

m_lPt[v,1]=(u,v).ID;

m_fei[v]=distance(v,EndJuction);

m_NOW=m_NOW∪{v}]];

8)得到最优路径

9)绘制路径

定义ResultRoute为结果路径集;

若u=EndJunctionID,

curp=u;

curl=m_lPt[curp,1];

while(curp!=StartJunctionID)

[ResultRoute=ResultRoute∪{curl};

curp=m_lPt[curp,0];

curl=m_lPt[curp,1];]

若u1=StartJunctionID,

curp=u1;

curl=m_lPt1[curp,1];

while(curp!=EndJunctionID)

[ResultRoute=ResultRoute∪{curl};

curp=m_lPt1[curp,0];

curl=m_lPt1[curp,1];]

否则[

curP=DoneID;

curl=m_lPt[curp,1];

while(curP!=StartJunctionID)

[ResultRoute=ResultRoute∪{curl};

curp=m_lPt[curp,0];

curl=m_lPt[curp,1];]

curp=DoneID;

curl=m_lPt1[curp,1];

while(curP!=EndJunctionID)

[ResultRoute=ResultRoute∪{curl};

curp=m_lPt1[curp,0];

curl=m_lPt1[curp,1];]]

路径规划模块中的双向分层动态路径规划方法流程如图25,26所示:

第七步:动态仿真模块的实现

受实验条件和我国目前科技水平所限,实时交通流无法从交通控制中心获得。因此,该模块采用随机发生器,实时生成随机交通流。生成的实时交通阻抗存入DynamicCost[i,0]和DynamicCost[i,1]数组,其中i代表道路ID。

将生成的实时交通流数据写入动态交通流数据库,匹配字段为道路ID。利用线性参照系和动态分段技术,实时表现动态交通流。

将实时交通阻抗数组DynamicCost[i,0]和DynamicCost[i,1],传入动态路径规划模块,生成最优路径。如果新的路径与旧的路径相比,发生了较大变化,重新绘制最优路径。

该模块的方法流程如图27所示:

仿真界面:

系统启动界面如图28所示。

选择路径规划方法界面如图29所示。

点选起讫点界面如图30所示。

点击确定查询最优路径,生成的最优路径如图31所示。

系统通过实时交通流进行动态路径规划

T=1时,如图32所示。

T=2时,如图33所示。

T=3时,如图34所示。

以上所述仅是针对面向城市交通的动态路径诱导方法的实施步骤,应当指出,对于本技术领域的普通技术人员来说,此方法还可以对原有的诱导系统在不改变硬件环境的条件下进行升级和增容,这些使用也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号