基于GIS的城市道路网最短路径分析
- 格式:doc
- 大小:28.00 KB
- 文档页数:8
基于GIS的城市道路网最短路径分析摘要运用GIS网络分析功能,针对城市道路网的特点,建立了基于路段连接的道路网络模型,并选择可达性作为道路权重对道路网进行了最短路径分析。
对经典的Dijkstra算法加以改进,提出了求解道路网任意两点间最短路径的算法,该算法搜索速度快,具有较强的适用性。
关键词最短路径;可达性;道路网0 引言随着计算机和地理信息科学的发展,地理信息系统因其强大的功能得到日益广泛和深入的应用。
网络分析作为GIS最主要的功能之一,在电子导航、交通旅游、城市规划以及电力、通讯等各种管网、管线的布局设计中发挥了重要的作用,通用的网络分析功能包括路径分析、资源分配、连通分析、流分析等。
网络分析中最基本和最关键的问题是最短路径问题,它作为许多领域中选择最优问题的基础,在交通网络分析系统中占有重要地位。
从道路网络模型的角度看,最短路径分析就是在指定道路网络的两节点间找出一条阻碍强度最小的路径。
根据阻碍强度的不同定义,最短路径不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等。
相应地,最短路径问题就成为最快路径问题、最低费用问题等。
因此,城市道路网作为一种大型网络设施有其本身的特征。
它一方面包含网络本身的拓扑特征;另一方面还包含了大量反应地理位置特征的几何数据。
本文根据道路网的特点,运用GIS网络分析功能对道路网络模型、道路的权重选择以及快速寻求路网中两节点间的最短路径算法分别进行了研究。
1 道路网模型及权重设置1.1 道路网模型建立城市道路网主要由众多道路相交、相连构成。
在纵横交织、错综复杂的道路网络中,道路间的地理位置关系相当复杂,一条道路可能与若干条道路相交相连,且其相交相连的模式复杂。
为了避免过多地考虑道路间的拓扑关系,抽取道路网中道路交叉路口作为分析对象,并对道路以交叉路口为结点进行分割,成为路段。
这样,整个网络图将由交叉路口点和路段组成,并定义交叉路口点为网络的结点,路段为网络的弧。
辽宁师范大学硕士学位论文GIS中最短路径问题的研究与实现姓名:***申请学位级别:硕士专业:地图学与地理信息系统指导教师:***20070602愿始数据扩展后的数据图4一I道路网数据原始的道路网数据大约有5000个路口,6700条道路,为了更好地体现本文中算法实现的效率,本文将原始数据扩大了9倍,最终参与运算的数据中约有42000多个路口和62000多条道路。
扩大后的数据虽然并不能直接模拟某一具体城市或地区的道路网数据,但是由于本文主要研究最短路径算法在具体平台上的实现,所实现的程序也是一种算法验证程序,并不是实用系统,因此扩大后的道路网数据完全可以满足计算要求,并且这一数据量也代表了现代大城市的道路网真实数据量。
可以较好的模拟出真实的算法实现效率。
计算最短路径应当以道路权值为标准,本程序中已经将道路的权值与路径长度相乘并存入道路的weight字段中,因此在程序运行中不需要同时取道路长度和权值,只需要取weight字段值进行计算。
4.2.2软硬件平台本研究基于ArcGISEngine平台,实现语言为|ISc#语言,编程环境为MsVisualStudio.Net2005。
GIS中最短路径问题的研究与实现路数据包括点和线两类,因此就有两种附带拓扑关系的方法,一是在每个点元素的属性中附带与其相接的线元素的D,或直接附带与其相邻的点元素的D:二是在每个线元素的属性中附带两端的点元素的D。
相比较而言,第二中方法更为可行,原因如下:(1)点元素和线元素的关系为hn,也就是说一个点元素可能会找到多个线与其相连,如果按最大值为点元素增加属性,则肯定会浪费太量窑间,如果按平均数来增加属性,又会损失大量拓扑信息。
”’‘(2)线元素和点元素的关系始终为1:2,每个线元素有且仅有一个首点和一个尾点,只需要为线元素增加首节点D和尾节点m两个属性就可以实现,并且既不丢失拓扑关系,也不会浪费空间。
(3)按照第一种方式,则需要使用循环遍历与点相接的线元素,时间开销无法确定。
基于GIS的城市道路网最短路径算法探讨
严寒冰;刘迎春
【期刊名称】《计算机学报》
【年(卷),期】2000(023)002
【摘要】文中从城市道路网络的特点出发,分析了道路路段间的连通关系,得出一种求城市道路网络两节点间的最短路径的算法.算法的复杂度与网络节点数N成线性关系,即O(N).最后通过在GIS软件MapInfo中编制的算法程序实例,验证了算法的实用性和可靠性.
【总页数】6页(P210-215)
【作者】严寒冰;刘迎春
【作者单位】浙江工程学院电子与自动化系,杭州,310033;浙江工程学院电子与自动化系,杭州,310033
【正文语种】中文
【中图分类】TP391
【相关文献】
1.浅析城市道路网中的最短路径算法 [J], 陈献辉
2.基于GIS的城市道路网可达性评价 [J], 郑晓蕾
3.基于RS与GIS的城市道路网密度计算 [J], 任慧;周振红;周鑫鑫
4.基于GIS的城市道路网最短路径分析 [J], 韩俊卿
5.基于ArcGIS的城市道路网最优路径探讨 [J], 孙晓莉;钟亮;田淑静;和万荣;郭朝元;景志雄
因版权原因,仅展示原文概要,查看原文内容请购买。
ArcGIS ⽹络分析[2.1]最短路径最短路径求解【如果看到此博客还没有⽹络数据集的,请参考第⼀章的内容,,看⽬录】最短路径,是什么最短?时间最短?距离最短?什么距离?路程距离?考虑到拥堵问题,限速问题,换乘问题,在现实的最短路径远远⽐计算机中的最短路径要复杂,因为要考虑的因素太多了。
这些因素就叫作最短路径求解过程中的“阻抗”,和电阻阻碍电流类似。
最短路径是后⾯⼏个分析类型的基础,只有求得了最短路径,才知道能覆盖多⼤地⽅(服务区)、事故点与最近设施的路径怎么⾛(最近设施)等。
在上⼀章,就已经有了最简单的路径分析:单⼀的道路⽹,阻抗仅仅为公路⽹的长度。
在这⾥不讨论最短路径的内部算法,似乎有⼤佛说过,ESRI是⽤的Dijkstra算法的变种算法。
最短路径中有什么元素呢?换句话说,最短路径要什么东西才能分析?途径点、障碍。
最短路径输出了什么?当然就是最短路径的那条线啊!换成图的形式,就是这样⼦。
输⼊必选参数[途径点],可选参数:充当障碍的[点线⾯],基于连通策略和阻抗,就能计算出最短路径。
什么是障碍呢?例如,某条路正在封闭施⼯,那施⼯的那个地⽅就是障碍,这⾥是不能通⾏的,就代表最短路径是不会⾛过障碍的。
路径分析常⽤设置在这⾥打开⽹络分析图层的属性窗⼝找到分析设置选项卡,就会有如下图:输⼊元素输出元素途径点障碍最短路径经常会使⽤到的设置是:阻抗、限制、⽅向、交汇点的U形转弯、这⼏个。
阻抗很简单,分析的时候经过这条路的花费成本,可以这么简单的理解。
可以是时间、平均消耗体⼒、道路长度等。
限制限制主要有两种:转弯限制和单⾏线限制。
有的⼗字路⼝会有禁⽌转向左边或者右边,或者⼗字路⼝等红绿灯的时间⽐较长的情况,这个就是转弯限制。
转弯限制怎么来的呢?当⽹络数据集中加⼊了转弯要素类的时候,这个复选列表就可以选择了。
有关如何制作转弯要素类,请跳到第四章。
单⾏线,有的道路只能⼀个⽅向⾛,不能来回⾛,这也是很常见的。
⽅向这个是导航设置。
基于GIS的城市交通网络可达性分析随着城市化进程的加快和人口的不断增长,城市交通问题日益突出。
为了解决交通拥堵、优化交通路线规划等问题,基于GIS的城市交通网络可达性分析成为了研究的热点。
本文将从交通网络的建立、可达性分析方法以及可达性分析结果的应用三个方面,进行讨论和探索。
一、交通网络的建立城市交通网络是可达性分析的基础。
建立一个准确、完整的城市交通网络模型对于分析交通可达性至关重要。
以某市为例,可以通过收集交通路网数据、公共交通站点数据以及交通流量数据来搭建城市交通网络模型。
利用GIS软件,将这些数据进行整合和处理,建立出一个真实、精确的城市交通网络模型。
二、可达性分析方法在城市交通网络模型建立完成后,可以采用多种方法进行交通网络可达性分析。
其中常用的方法包括:最短路径分析、可达度分析和权重距离分析等。
最短路径分析是计算两点之间最短路径的方法,适用于短途出行的可达性分析。
可通过计算两个点之间的距离或时间来评估出行的便捷程度。
可达度分析是根据交通网络模型计算出各区域的总可到达性,常用指标是可达性指数。
可通过计算每个节点到其他节点的最短路径长度,再统计可到达其他节点的个数,得出可达度指标。
权重距离分析考虑了不同交通路段的阻抗系数,可以更加准确地评估交通网络的可达性。
通过设定不同的权重,可以得出更接近实际情况的结果。
例如,道路拥堵程度高的路段可以设置较大的阻抗系数,从而在计算中反映出拥堵对可达性的影响。
三、可达性分析结果的应用交通可达性分析结果可以为城市交通规划、交通拥堵疏导、公共交通站点布局等提供科学依据和参考。
通过研究交通网络中不同节点的可达性情况,可以找出交通瓶颈区域,并进行相应的优化规划,以提升交通效率。
此外,可达性分析结果还可用于公共交通站点布局。
通过分析各个区域的可达性指数,可以确定哪些区域需要新建或调整公交站点,以提供更便捷的公交服务。
另外,可达性分析结果还可以为交通拥堵疏导提供参考。
ArcGIS⽹络分析(最短路径问题分析)⽹络分析(最短路径问题分析)⼀、实验⽬的:理解最短路径分析的基本原理,学习利⽤arcgis软件进⾏各种类型的最短路径分析的操作。
⼆、实验准备1、实验背景:最短路径分析是空间⽹络分析中最基本的应⽤,⽽交通⽹络中要素的设置对最短路径的选择有着很⼤的影响。
实验要求根据不同的权重,给出到达指定⽬的地的路径选择⽅案,并给出路径长度。
在⽹络中指定⼀个超市,要求分别求出在距离、时间限制上从家到超市的最佳路径。
给定访问顺序,按要求找出从家经逐个地点达到⽬的地的最佳路径。
2、实验材料:软件:ArcGIS Desktop 9.x ,实验数据:⽂件夹ex6中,⼀个GeoDatabase地理数据库:City.mdb,内含有城市交通⽹、超市分布图,家庭住址以及⽹络关系。
三、实验内容及步骤⾸先启动ArcMap,选择ex6\city.mdb,再双击后选择将整个要素数据集“city”加载进来,然后将“place”点状要素以“HOME”字段属性值进⾏符号化,1值是家,0值是超市。
第1步⽆权重最佳路径的选择加载“设施⽹络分析”⼯具条(“视图”>>“⼯具条”,勾选“设施⽹络分析”),点选旗标和障碍⼯具板下拉箭头,将旗标放在家和想要去的超市点上。
第2步加权最佳路径选择在设施⽹络分析⼯具条上,点选旗标和障碍⼯具板下拉箭头,将旗标放在家和想去的某个超市点上。
选择“分析”下拉菜单,选择“选项”按钮,打开“分析选项”对话框,选择“权重”标签页,在“边权重”上,全部选择长度“length”权重属性。
点选“追踪任务”下拉菜单选择“查找路径”。
单击“执⾏”键,则以长度为⽐重为基础的最短路径将显⽰出来,这条路径的总成本将显⽰在状态列。
上述是通过距离的远近选择⽽得到的最佳路径,⽽不同类型的道路由于道路车流量的问题,有时候要选择时间较短的路径,同样可以利⽤⽹络分析进⾏获得最佳路径。
第3步按要求和顺序逐个对⽬的点的路径的实现在设施⽹络分析⼯具条上,点选旗标和障碍⼯具板下拉箭头,将旗标按照车辆访问的顺序逐个放在点上。
ArcGIS交通路网分析简介ArcGIS是一套由Esri公司开发的地理信息系统软件,用于地图制作、数据分析和地理信息可视化等任务。
而交通路网分析是ArcGIS中的一个重要功能,它可以帮助我们对交通网络进行分析和优化,从而提高交通运输的效率和安全。
本文将介绍ArcGIS中的交通路网分析功能以及如何使用它来进行实际的交通路网分析。
功能介绍ArcGIS中的交通路网分析功能主要包括以下几个方面:1.路径分析:可以帮助我们找到两个地点之间的最短路径或最佳路径。
路径分析可以应用于各种场景,比如寻找最佳驾驶路线、计算货物运输的最短路径等。
2.服务区分析:可以根据给定的设施点和服务范围,计算出这些设施点的服务区域。
服务区分析可以帮助我们确定服务设施的合理位置以及设施的服务范围。
3.最近设施分析:可以找到离给定地点最近的设施点。
最近设施分析可以应用于各种场景,比如找到离用户当前位置最近的餐馆、找到离目标地点最近的公交站等。
4.网络分析:可以进行高级的网络分析,比如计算路径的行驶时间、计算路径的行驶成本等。
网络分析可以帮助我们对交通路网进行更加详细和深入的分析。
使用方法下面我们将介绍如何使用ArcGIS进行交通路网分析。
1.准备数据:首先,我们需要准备交通路网的数据。
这些数据通常包括路段的几何形状、路段的属性信息以及设施点的位置信息等。
可以通过导入现有数据或在ArcGIS中手动绘制路网数据来准备数据。
2.创建网络数据集:在ArcGIS中,我们需要将准备好的路网数据转换为网络数据集。
网络数据集是一种特殊的数据结构,可以支持网络分析所需的功能。
通过ArcGIS中的工具可以方便地将路网数据转换为网络数据集。
3.设置网络属性:在网络数据集中,我们需要设置各个路段的属性信息,比如速度限制、是否允许左转、是否允许掉头等。
这些属性信息将影响路径分析、服务区分析等功能的结果。
4.进行交通路网分析:在网络数据集准备好之后,我们可以使用ArcGIS中的交通路网分析工具进行具体的分析。
浅谈GIS中网络分析与最短路径的实现专业:交通信息工程及控制本科生:程海峰主导老师:林科摘要网络分析作为GIS的重要功能在电子导航、交通管理、城市规划、管线的布局设计中发挥了重要的作用。
本文侧重于从网络拓扑关系的获取到最短路径算法的实现,为进一步研究GIS中网络分析的高效访问奠定基础。
文章首先介绍了网络拓扑数据模型的一些基本概念,根据已有的研究经验,提出了自己有关网络数据模型中最基本的两个概念(网线和结点)的理解。
在这个框架之下,又分析了网络拓扑关系的建立过程,得出了网络拓扑关系获取的一般过程。
第二部先介绍了最短路径算法选择的有关问题,通过查阅有关文献发现,目前解决系统最短路径问题应用最为广泛的是Dijkstra算法的思想。
最后阐述了有关经典Dijkstra算法的主要思想并利用有关数据结构方面的知识写出了具体算法的实现过程。
关键词:网络拓扑网络数据模型Dijkstra算法目录摘要 (I)2. 网络拓扑关系的建立.......................................................................................................................... - 2 -2.1网络数据模型的基本概念.. (2)2.2网络拓扑关系的获取 (2)3. 最短路径算法...................................................................................................................................... - 5 -3.1算法选择 (5)3.2传统D IJKSTRA算法的主要思想 (5)3.3经典D IJKSTRA算法的实现 (6)参考文献 .................................................................................................................................................... - 8 -附录 ........................................................................................................................................................ - 9 -1. 引言随着地理信息系统产业的建立和数字化信息产品在全世界的普及,地理信息系统已经深入到各行各业。
基于ArcGIS Server的城市道路最短路径分析方法研究马德涛;刘建忠;王锐;宋华伟
【期刊名称】《海洋测绘》
【年(卷),期】2007(027)005
【摘要】ArcGIS Server是构建企业级分布式的GIS应用开发平台,基于ArcGIS Server这个开发平台,对实现城市道路最短路径的道路数据的组织、相关技术和方法作了初步的研究,并构建了试验环境,初步实现了B/S网络模式下城市道路最短路径的分析.
【总页数】4页(P58-61)
【作者】马德涛;刘建忠;王锐;宋华伟
【作者单位】解放军信息工程大学,测绘学院,河南,郑州,450052;解放军信息工程大学,测绘学院,河南,郑州,450052;解放军信息工程大学,测绘学院,河南,郑州,450052;解放军信息工程大学,测绘学院,河南,郑州,450052
【正文语种】中文
【中图分类】P208
【相关文献】
1.基于ArcGIS Server网络分析之最短路径的实现 [J], 张淑玲
2.基于ArcGIS Engine的城市道路最短路径分析方法研究 [J], 肖海平;陈兰兰;彭涛
3.基于ArcGIS Server的最短路径关键技术 [J], 辜运燕;戴相喜;欧晓
4.基于ArcGIS Mobile的最短路径分析方法研究 [J], 李展坤;赵文吉;段福洲;郭文
峰
5.基于ArcGIS Mobile的最短路径分析方法研究 [J], 张红岩;张永福;张琴琴因版权原因,仅展示原文概要,查看原文内容请购买。
ArcGIS中最短路径的实现(二)-电脑资料上次介绍了用几何网络实现的“最短路径”,这次用网络数据集实现真正的最短路径功能,跟上次一样,先处理下数据,。
1、先打开ArcCatalog,连接到目标文件夹,假定该文件下有一个名为road的道路图层。
2、在road图层上右键新建一个网络数据集,并按照其默认设置直至完成。
3、打开该地图的工作空间,把刚才新建的网络数据集添加工作空间中。
4、在网络分析菜单中选择新建最近设施点。
这时在工作空间里,可以看到多了一个名为“Closest Facility”的图层。
它下面还有4个子图层,名字分别为“Facilities”,“Incidents”,“Barriers”,“Routes”。
“Facilities”就是设施点图层,也就是目的点,“Incidents”的意思就是出发点,“Barriers”是障碍点,意思就是地图某条道路附近有一个障碍点,如果障碍点与道路距离在容限范围内,则表示此道路不通,“Routes”就是最终的结果。
这样我们编程实现最短路径的思路就出现了:1、添加出发点。
2、添加目的点。
3、生成最优路径,获取结果。
这里的添加出发点或者目的点,是往“Facilities”或“Incidents”图层上添加元素。
获取结果也是从“Routes”中获取Polyline。
往“Facilities”或“Incidents”图层上添加元素用到的主要方法是INALocator的QueryLocationByPoint函数,生成路径主要接口是INASolver和它的Solve方法。
获取结果是按属性查找,因为“Routes”类其实就是一个图层类,只不过只是存在于内存。
1 CMapControlDefault m_map;2 IPointCollectionPtr m_ipPointCollection;34 ILayerPtr ipLayer = m_map.GetLayer(0); // 网络数据集5 INALayerPtr ipNaLayer = ipLayer;6 if (NULL == ipNaLayer)7 {8 return;9 }1011 INAContextPtr ipNaContext;12 HRESULT hr = ipNaLayer->get_Context(&ipNaContext);13INAClassLoaderPtr ipNAClassLoader(CLSID_NAClassLoader);14 INALocatorPtr ipNALocator = NULL;15 hr = ipNaContext->get_Locator(&ipNALocator);16 ipNALocator->put_SnapToleranceUnits(esriMeters);17 ipNALocator->put_SnapTolerance(200);18 ipNaContext;19 hr = ipNAClassLoader->putref_Locator(ipNALocator);2021 INamedSetPtr ipNamedSet = NULL;22 ipNaContext->get_NAClasses(&ipNamedSet);2324 CString szName = "Facilities";25 BSTR bstrName = szName.AllocSysString();26 INAClassPtr ipNAFacilitiesClass = NULL;27hr = ipNamedSet->get_ItemByName(bstrName, (IUnknown**)&ipNAFacilitiesClass);28 szName = "Incidents";29 bstrName = szName.AllocSysString();30 INAClassPtr ipNAIncidentsClass = NULL;31hr = ipNamedSet->get_ItemByName(bstrName,(IUnknown**)&ipNAIncidentsClass);32 szName = "CFRoutes";33 bstrName = szName.AllocSysString();34 INAClassPtr ipNARoutesClass = NULL;35hr = ipNamedSet->get_ItemByName(bstrName, (IUnknown**)&ipNARoutesClass);3637 INALocationPtr ipNALocation1(CLSID_NALocation);38 INALocationPtr ipNALocation2(CLSID_NALocation);39 ipNAClassLoader->get_Locator(&ipNALocator);40 IPointPtr ipBeginPoint(CLSID_Point);41 m_ipPointCollection->get_Point(0, &ipBeginPoint);42 IPointPtr ipEndPoint(CLSID_Point);43 m_ipPointCollection->get_Point(1, &ipEndPoint);44 IPointPtr ipPoint1(CLSID_Point);45 IPointPtr ipPoint2(CLSID_Point);46 double dbLVal = 0.0;47ipNALocator->QueryLocationByPoint(ipBeginPoint, &ipNALocation1, &ipPoint1, &dbLVal);48ipNALocator->QueryLocationByPoint(ipEndPoint, &ipNALocation2, &ipPoint2, &dbLVal);4950 INALocationObjectPtr ipNALocationObject = NULL;51 IFeatureClassPtr ipFeatureClass = ipNAIncidentsClass;52 IFeaturePtr ipFeature = NULL;53 ipFeatureClass->CreateFeature(&ipFeature);54 IRowSubtypesPtr ipRowSubtypes = ipFeature;55 ipRowSubtypes->InitDefaultValues();56 ipFeature->putref_Shape(ipBeginPoint);57 ITablePtr ipTable = NULL;58 ipFeature->get_Table(&ipTable);59 long nIndex = 0;60 szName = "Sequence";61 bstrName = szName.AllocSysString();62 ipTable->FindField(bstrName, &nIndex);63 VARIANT var_int;64 var_int.intVal = 1;65 var_int.vt = VT_INT;66 ipFeature->put_Value(nIndex, var_int);67 szName = "Name";68 bstrName = szName.AllocSysString();69 ipTable->FindField(bstrName, &nIndex);70ipFeature->put_Value(nIndex, COleVariant("Start Point"));71 ipNALocationObject = ipFeature;72 ipNALocationObject->put_NALocation(ipNALocation1);73 ipFeature->Store();74 IFieldsPtr ipFields(CLSID_Fields);75 hr = ipTable->get_Fields(&ipFields);76 long nFieldCount = 0;77 hr = ipFields->get_FieldCount(&nFieldCount);78 for (int k = 0; k < nFieldCount; k++)79 {80 IFieldPtr ipField(CLSID_Field);81 ipFields->get_Field(k, &ipField);82 BSTR bstrFieldName;83 ipField->get_Name(&bstrFieldName);84 CString szFieldName = bstrFieldName;85 }8687 ipFeatureClass = ipNAFacilitiesClass;88 ipFeatureClass->CreateFeature(&ipFeature);89 ipRowSubtypes = ipFeature;90 ipRowSubtypes->InitDefaultValues();91 ipFeature->putref_Shape(ipEndPoint);92 ipTable = NULL;93 ipFeature->get_Table(&ipTable);94 nIndex = 0;95 szName = "Sequence";96 bstrName = szName.AllocSysString();97 ipTable->FindField(bstrName, &nIndex);98 var_int.intVal = 2;99 ipFeature->put_Value(nIndex, var_int);100 szName = "Name";101 bstrName = szName.AllocSysString();102 ipTable->FindField(bstrName, &nIndex);103ipFeature->put_Value(nIndex, COleVariant("End Point"));104 ipNALocationObject = ipFeature;105ipNALocationObject->put_NALocation(ipNALocation2);106 ipFeature->Store();107108 INAClosestFacilitySolverPtr ipNACFSolver = NULL;109 INASolverPtr ipNASolver = NULL;110 ipNaContext->get_Solver(&ipNASolver);111112 IGPMessagesPtr ipGPM(CLSID_GPMessages);113 ITrackCancelPtr ipTrackCancel(CLSID_TrackCancel);114 VARIANT_BOOL bIsPartialSolution;115ipNASolver->Solve(ipNaContext, ipGPM, ipTrackCancel, &bIsPartialSolution);116117 szName = "CFRoutes";118 bstrName = szName.AllocSysString();119 ipNARoutesClass = NULL;120hr = ipNamedSet->get_ItemByName(bstrName, (IUnknown**)&ipNARoutesClass);121122IFeatureClassPtr ipFeatureClassRoutes = ipNARoutesClass;123 IFeatureCursorPtr ipFCursor = NULL;124 IQueryFilterPtr ipQueryFilter(CLSID_QueryFilter);125 CString szQueryFilter("ObjectID > 0");126 BSTR bstr_QueryFilter = szQueryFilter.AllocSysString();127 ipQueryFilter->put_WhereClause(bstr_QueryFilter);128 VARIANT_BOOL bCycle = VARIANT_FALSE;129 try130 {131 ipFeatureClassRoutes->Search(ipQueryFilter, bCycle, &ipFCursor);132 }133 catch (CException* e)134 {135 CString szErrorMsg;136e->GetErrorMessage(szErrorMsg.GetBuffer(MAX_PATH),MAX_PATH);137 szErrorMsg.ReleaseBuffer();138 e->Delete();139 szErrorMsg += "\n";140 OutputDebugStr(szErrorMsg);141 }142 catch ()143 {144OutputDebugStr("An Unknowned Exception Occurred!\n");145 }146147 IFeaturePtr ipLineFeature = NULL;148 hr = ipFCursor->NextFeature(&ipLineFeature);149 while (ipLineFeature != NULL)150 {151 IGeometryPtr ipGeometry = NULL;152 IPolylinePtr ipPolyLine = NULL;153 ipLineFeature->get_Shape(&ipGeometry);154 esriGeometryType type;155 ipGeometry->get_GeometryType(&type);156 if (type == esriGeometryPolyline)157 {158 ipPolyLine = ipGeometry;159 AddPolyline(ipPolyLine, 4);160 }161 hr = ipFCursor->NextFeature(&ipLineFeature);162 }163 IActiveViewPtr ipActiveView = NULL;164 ipActiveView = m_map.GetActiveView();165 ipActiveView->Refresh();。
收稿日期:2001208224 作者简介:刘云翔,硕士研究生,主要研究领域为地理信息系统与数据库技术.李军,博士,讲师,主要研究领域为地理信息系统与信息可视化技术.陈宏盛,硕士,副教授,主要研究领域为人工智能与数据库.陈荦,硕士,讲师,主要研究领域为地理信息系统与数据库技术.基于城市道路网的最短路径分析解决方案刘云翔 陈 荦 李 军 陈宏盛(国防科技大学电子科学与工程学院,湖南长沙410073)摘 要:近年来G IS 对网络分析功能的需求迅速增长.网络分析中的一个关键问题是最短路径问题,它作为许多领域中选择最优问题的基础,在交通网络分析系统中占有重要地位.由于最短路径分析常用于汽车导航系统以及各种城市应急系统(如110报警、119火警以及120急救系统),本文针对城市道路网的特点,提出了一种实用、高效的最短路径分析解决方案.关键词:最短路径;D ijk stra 算法;城市道路网中图分类号:T P 391.4 文献标识码:A 文章编号:100021220(2003)0721390204An I m plem en ta tion of the Shortest Pa th Ana lysis Ba sed on C ity Road NetworkL I U Yun 2X iang ,CH EN L uo ,L I Jun ,CH EN Hong 2Sheng(S chool of E lectron ic S cience and E ng ineering ,N a tiona l U n iversity of D ef ense T echnology ,Chang sha 410073,Ch ina )Abstract In recent years ,N etw o rk analyses have becom e mo re and mo re i m po rtant in G IS .A s the key p roblem of netw o rk analyses ,computing sho rtest path s over a netw o rk has becom e an i m po rtant task in m any netw o rk and trans 2po rtati on related analyses.Sho rtest path analysis is often used in veh icle navigati on system and city em ergency sys 2tem s .T h is paper introduces a p ractical and efficient realizati on of sho rtest path analysis acco rding to the characteristics of city road netw o rk .W e run our algo rithm on a m iddle 2range personal computer w ith relatively large dataset .T he ex 2peri m ental result is very p rom ising ,thus p roves the efficiency of the p ropo sed algo rithm .Key words sho rtest path ;dijk stra algo rithm s ;road netw o rk1 引 言近年来由于普遍使用G IS 管理大型网状设施(如城市中的道路网、各类地下管线、通讯线路等),使得对网络分析功能的需求迅速增长.通用的网络分析功能包括路径分析、资源分配、连通分析、流分析等.网络分析中最基本的问题是最短路径问题,它作为许多领域中选择最优问题的基础,在交通网络分析系统中占有重要地位.从网络模型的角度看,最短路径分析就是在指定网络中两结点间找一条阻碍强度最小的路径.根据阻碍强度的不同定义,最短路径不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等.由于最短路径问题在实际中常用于汽车导航系统以及各种城市应急系统等(如110报警、119火警以及120急救系统),本文对基于城市道路网的最短路径分析进行了深入研究.2 实现机制要对城市道路网进行最短路径分析,首先必须将现实中的城市道路网络实体抽象化为网络图论理论中的网络图,然后通过图论中的网络分析理论来实现道路网络的最短路径分析.在实际应用中,城市道路网的表现形式一般为数字化的矢量地图,其网络空间特征中的交叉路口坐标和道路位置坐标是在地图上借助图形来识别和解释的;而为了能够高效率地进行最短路径分析,必须首先将其按结点和弧的关系抽象为图的结构.这就需要先对原始道路图进行预处理,建立其相应的网络拓扑关系.预处理的工作主要包括:・对原始的道路图进行线元素的拓扑检查、进行剪断处理,生成线和线相互不相交叉的道路图;・对剪断后的道路图创建拓扑关系,并定义其属性特征,如道路名称、道路距离、交通流量等;・生成有拓扑关系的拓扑文件.经过预处理后,最短路径分析算法直接从拓扑文件中提取道路网的网络拓扑结构并加载到内存中,从而提高路径分析的效率.如果由于城市建设的快速发展,城市道路发生了变化,地图更新后,只需重新进行预处理生成拓扑文件.系统的整个工作流程见图1.要实现这样的系统主要需解决两个关键问题:(1)如何用地图表示城市道路网以及提取网络拓扑结构; 第24卷第7期 2003年7月小型微型计算机系统M I N I -M I CRO SYST E M S V o l 124N o .7 July 2003 (2)如何高效率地进行最短路径分析.本文将对这两个问题分别提出解决方案.图1 系统工作流程F ig .1 T he w o rkflow of system3 城市道路网的地图表示和网络拓扑结构的提取G IS 中的矢量地图是按图层组织的,即将一幅地图分成多个层层叠加的透明层,这些透明层就称为图层.每个图层存放一类专题或一类信息,它由点、线、面等空间对象的集合组成.一般将描述空间对象的数据分为两类,即空间数据和属性数据.其中,空间数据记录的是空间对象的位置、拓扑关系和几何特征;属性数据是对空间数据的语义描述,反映了空间对象的本质特征.典型的属性数据有空间对象的名称、类型和对象特征等.一般在G IS 中,空间数据和属性数据是分别存储的.如在M ap Info 中,属性数据以数据库的形式存储为一张表,而空间数据则以M ap Info 自己定义的格式保存于文件之中.两者之间通过一定的索引机制联系起来.针对图层组织的特点,我们将城市道路网单独作为一个图层处理,称之为道路层.将实际的城市道路网转化到地图的图层中时,若将每一条街道(在网络图中对应于每一条弧)和街道的交叉路口(在网络图中对应于每一个结点)都作为地理对象保存在图层中,不仅会给地图的制作造成很大的工作量,而且不利于日后地图的维护.同时,在最短路径分析时,用户往往关心的只是街道的相关信息.因此我们只将各条街道作为线对象保存在图层中.至于街道的属性数据和交叉路口的坐标信息,虽然各G IS 软件对其属性数据文件和空间数据文件的具体格式是不公开的,很难从中直接提取.但它们均提供了相应的数据交换文件,以用于空间数据和属性数据的数据交换.如M ap Info 的.M IF 和.M I D 文件,A rc Info 的shapefile 文件等.为了方便起见,在以下的讨论中,我们仅针对M ap In 2fo 的文件结构进行讨论.在M ap Info 中,每个图层均有其对应的属性数据表结构文件(.TAB ).属性数据表结构文件定义了图层中空间对象的属性数据的表结构,包括字段数、字段名称、字段类型和字段宽度等,另外还指出索引字段及一些用于显示的参数设置等.因此我们在道路层的属性数据表结构文件中定义街道的属性信息字段如下:表1 街道的属性信息字段T able 1 T he attribute field of streets街道I D街道名称正向权值反向权值 其中,街道I D 是街道唯一的标识号;街道名称是街道的物理名称;街道的正向、反向权值是不同方向上街道的权值,其方向是由地图绘制的方向确定.M ap Info 对地图中的每一图层可以生成一种交换格式文件,它将地图空间数据与属性数据用文字的方式表示了出来.交换格式文件包含有两类文件,其中.M IF 文件主要包含了空间数据,指明了地图的坐标系、属性表结构、地图对象的类型和地理坐标信息等(其文件结构如图2所示)..M I D 文件则详细描述了各地图对象的属性信息,它的记录排列顺序与.M IF 文件中空间对象的排列顺序一致.V ersi on 2D eli m iter ","Index 1,3Coo rdSys Earth P ro jiecti on 1,104Co lum ns 3 Street Char (40) T ype Integer D ata L ine 2122.467737.78662122.467537.7847 Pen (1,2,0)L ine 2122.467537.78472122.467537.7828 Pen (1,2,0)L ine 2122.467537.78282122.467437.7809 Pen (1,2,0)L ine 2122.476737.78092122.467337.779 Pen (1,2,0)图2 M IF 文件结构示例F ig .2 A n examp le of .M IF file structure从图2中可以看出,在.M IF 文件中对于图层中的每一个线对象,均记录了该线对象的起点和终点的经纬度坐标.因此我们可以直接对.M IF 文件进行操作,从中提取出各结点的坐标信息,并对各结点编号,生成结点表;同时从.M I D 文件中提取各街道的属性数据,生成弧段表.结点表和弧段表(格式如图3所示)一起作为拓扑文件表达了网络的拓扑结构.当地图更新时,只需重新生成结点表和弧段表,然后就能从中提取出网络的拓扑结构,并用适当的数据结构来表示.对于A rc Info ,针对其shapefile 文件可以根据同样的处理思路来提取网络的拓扑结构.图3 结点表和弧段表的格式F ig .3 T he fo r m at of node table and arc table表示网络的数据结构有很多,例如邻接矩阵、邻接表、十字链表等.以往的研究证明针对最短路径分析,表示网络的数据结构中最有效的是Fo r w ard Star 表示法〔3〕.该表示法使用两个数组来表示网络的拓扑关系.一个数组存储和弧相关的数据,另一个数组存储和结点相关的数据.网络中所有的弧按照一定的顺序排列在数组中,即以结点1,2,3,……为起点的19317期 刘云翔等:基于城市道路网的最短路径分析解决方案 弧在数组中顺序排列,起点相同的弧则可以任意排列.弧的属性数据,如起点、终点、权值等,以某种方式和弧保存在一起.对于结点数组,第i个元素和结点i相对应,它存储的是以结点i为起点的第一条弧在与弧相关的数组中的位置.4 最短路径算法我们所讨论的最短路径算法主要针对平面有向图,一些相关定义如下:定义1 有向图G={N,A},N为结点集合,A为弧的集合;结点数n= N ,弧数m= A ;s表示源结点,t表示目的结点.定义2 d(i)表示源结点s到结点i的加权距离;l(i,j)表示连接结点i和j的弧的权值;S(j)表示结点j的状态,分为未标记结点(unreached),临时标记结点(tempo rarily labeled)和永久标记结点(per m anently labeled)三种状态.经典的最短路径算法—D ijk stra算法〔2〕是目前多数系统解决最短路径问题采用的理论基础,其求解源结点s到目的结点t的最短路径的基本过程如下:(1)初始化网络.对所有结点i,如果i≠s,则d(i)←+∞,S(i)=unreached,否则d(i)=0,S(i)=per m a2nently labeled;(2)T←N;(3)从T中取出权值最小的结点k,d(k)=m in〔d(j),j∈T〕;S(k)=per m anently labeled;(4)如果k=t,则算法结束;(5)对于和k相连的每个结点j,j∈T.如果d(j)>d(k)+l(k,j),则d(j)←d(k)+l(k,j),S(j)=tempo rarilylabeled;(6)T←T-{k},转到步骤(3).由于算法将临时标记结点以无序的形式存放在一个链表或数组中.那么要选择一个权值最小的结点就必须把所有的点都扫描一遍.在大数据量的情况下,这无疑是一个制约计算速度的瓶颈.从对D ijk stra算法的分析中可以看出,步骤(3)是算法的核心步骤.实现它有两个关键问题要解决:(1)采用何种策略从T中选择权值最小的结点;(2)使用什么样的数据结构来维护T中的所有结点.常用的选择策略有F IFO(F irst In F irst O ut),L IFO (L ast In F irst O ut)和BFS(Best2F irst2Search).对于BFS策略,临时标记结点中权值最小的结点被认为是最好的结点.支持以上搜索策略的数据结构较常用的有数组、单双链表、堆栈、哈希散列和队列等.自从D ijk stra于1959年率先提出最短路径的求解算法以来,相继有不少新的最短路径算法被提出.Cherkassky等人于1993年从已有的最短路径算法中选择了比较有代表性的17种最短路径算法进行测试,测试结果表明:没有哪一种算法能够适应所有类型的网络〔1〕.这些算法的具体内容可以参见文献〔1〕.总体来说,这些算法采用的数据结构及其实现方法由于受到当时计算机硬件发展水平的限制,将空间存储问题放到了一个很重要的位置,以牺牲适当的时间效率来节省空间.目前,空间存储问题已不再是要考虑的主要问题,因此可以对已有的算法重新考虑并进行改进.结合文献〔1〕,我们通过实验比较,选择了D IKB(D ijk stra’s algo rithm i m p le2 m ented w ith Buckets)算法来对城市道路网进行最短路径分析.D IKB算法相对于传统的D ijk stra算法的改进之处主要体现在:所有弧的权值都先转化为整数值(最大的权值记为C),而所有的临时标记结点则用一个Bucket序列来维护. Bucket序列中所有的Bucket按0,1,2,3,4,……进行编号,第i个Bucket内装有权值为i的临时标记结点,每一个Buck2 et实际上是一个F IFO(F irst In F irst O ut)队列.第一个非空的Bucket内的每一个临时标记结点都是当前权值最小的结点.当一个结点的权值和状态发生变化时,它在Buckets序列中的位置也要相应改变.举例来说,对于权值为d(1)的临时标记结点i,若结点i的权值变为d(2),则要将它相应地从Bucket d(1)移到新的Bucket d(2)中;若结点i变为永久标记结点,则要将它从Bucket d(1)中删除.D IKB算法的其它处理步骤和传统的D ijk stra算法类似,不再详述.D IKB算法流程框图如图4所示.图4 D IKB算法流程框图F ig.4 T he flow chart of D IKB algo rithm为了进一步优化算法,我们在算法的实现中设置了一个索引L,L的初始值为0,所有满足i<L的Bucket都为空.下一个要扫描的结点直接从Bucket L中取出,若Bucket L为空,则L+1.在D IKB算法中,虽然为了维护Bucket序列需要占用一定的内存资源,但由于与Bucket相关的操作的复杂度仅为O(1),因而大大提高了算法的执行效率,这些操作包括:(1)检查一个Bucket是否为空;(2)在一个Bucket中增加一个元素;(3)从一个Bucket中删除一个元素.最坏情况下,D IKB 算法的时间复杂度是O(m+nC)〔1〕.2931 小 型 微 型 计 算 机 系 统 2003年5 小 结我们在最短路径分析系统中对各项关键技术进行了研究和验证,并在具有9844个结点,31835条弧段的实验用地图(其规模相当于省会级城市典型地图)上进行了实际测试(试验计算机配置为Celeron II 566,128M B 内存).在地图上选择图5 最短路径分析系统演示F ig .5 T he demonstruti on of sho rtest path analysis system了起点和终点后,两点之间的最短路径可在1秒内计算出,并在地图上加以渲染(如图5所示,Start 和End 之间的粗线代表了起点和终点之间的最短路径,下面的总加权距离即为该最短路径上各弧段的总权值).算法的实现效率可以满足110报警、119火警等应急系统的应用需求.测试结果如表2所示:表2 测试结果T able 2 T he result of experi m ent结点数弧数最小弧长最大弧长最快执行时间最慢执行时间平均执行时间9844318334104790.004s0.995s0.373sReference :1Cherkassky B V ,Go ldberg A V ,and R adzik T .Sho rtest path s algo rithm s :theo ry and experi m ental evaluati on 〔R 〕.T echnical R epo rt 9321480,Computer Science D epartm ent ,Stanfo rd U ni 2versity .1993.2D ijk stra E W .A no te on two p roblem s in connecti on w ith graph s〔J 〕.N um eriche M athem atik .1959,1:269~2713Benjam in Zhan F .T h ree fastest sho rtest path algo rithm s on real road netwo rk s :data structures and p rocedures 〔J 〕.Journal of Geograph ic Info r m ati on and D ecisi on A nalysis ,1995,1(1):69~824D ial R B.A lgo rithm 360:sho rtest path fo rest w ith topo logical o rdering 〔J 〕.Comm unicati ons of the A CM ,1969,12,632~6335Yu Dong 2kai ,L iu Yu 2shu .Study on a routing algo rithm based on Ichnography 〔J 〕.Journal of Beijing Institute of T echno logy ,2001,21(1):31~346T ang W en 2w u,Sh i X iao 2dong,Zhu D a 2kui.T he calculati on of the sho rtest path using modified D ijk stra algo rithm in G IS 〔J 〕.Journal of I m age and Graph ics ,2000,5(A )(12):1019~10237L ei Yang ,Gong J ian 2ya .A n efficient i m p lem entati on fo sho rtest path algo rithm based on D ijk stra algo rithm 〔J 〕.Journal of W uhan T echnical U niversity of Serveying and M app ing,1999,24(3):209~212附中文参考文献:5于东凯,刘玉树.基于平面图的最短路径算法的研究〔J 〕.北京理工大学学报,2001,21(1):31~346唐文武,施晓东,朱大奎.G IS 中使用改进的D ijk stra 算法实现最短路径的计算〔J 〕.中国图象图形学报,2000,5(A )(12):1019~10237乐阳,龚健雅.D ijk stra 最短路径算法的一种高效率实现〔J 〕.武汉测绘科技大学学报,1999,24(3):209~21239317期 刘云翔等:基于城市道路网的最短路径分析解决方案 。
综合实习7:最短路径问题分析与应用1.背景在现实中,最短路径的求取问题可以拓展为许多方面的最高效率问题,最短路径不仅指一般意义上的距离最短,还可以是时间最短、费用最少、线路利用率最高等标准。
2.目的学会用ArcGIS10进行各种类型的最短路径分析,理解网络分析原理。
3.数据GeoDatabase地理数据库:City.mdb。
数据库中包含一个数据库:City,其中含有城市交通网net、商业中心及家庭住址place、网络节点city_Net_Junctions等要素。
4.要求根据不同的要求,获得到达指定目的地的最佳路径,并给出路径的长度;找出距景点最近的某设施的路径。
在网络中指定一个商业中心,分别求出在不同距离、时间的限制下从家到商业中心的最佳路径。
给定访问顺序,按要求找出从家出发,逐个经过访问点,最终到达目的地的最佳路径。
研究阻强的设置对最佳路径选择的影响。
5.操作步骤启动ArcMap,打开city.mdb,双击city数据库,加载数据。
对点状要素place符号化:以HOME字段,1值为家,0值为商业中心。
(1)无权重最佳路径的生成1)在几何网络分析工具条上,选择旗标工具,将旗标放在“家”和想要取得“商业中心”点上。
2)选择分析|选项命令,打开“分析选项”对话框,确认“权重”和“权重过滤器”标签项全部是“无(None)”,这种情况下进行的最短路径分析是完全按照这个网络自身的长短来确定。
3)在“追踪任务”文本框中选择“网络路径分析”。
单击“解决”按钮。
显示出最短路径(图7-1),这条路径的总成本显示在状态栏中。
图7-1 无权重参照的最短路径的显示(2)加权最佳路径生成1)在几何网络分析工具条上,点选旗标工具,将旗标分别放在“家”和想去的某个“商业中心”的位置上。
2)选择“分析|选项”命令,打开“分析选项”对话框(图7-2)进入“权重”标签页,在边的权重(Edge weights)上,全部选择长度(length)权重属性。
浅谈GIS中网络分析与最短路径的实现专业:交通信息工程及控制本科生:程海峰主导老师:林科摘要网络分析作为GIS的重要功能在电子导航、交通管理、城市规划、管线的布局设计中发挥了重要的作用。
本文侧重于从网络拓扑关系的获取到最短路径算法的实现,为进一步研究GIS中网络分析的高效访问奠定基础。
文章首先介绍了网络拓扑数据模型的一些基本概念,根据已有的研究经验,提出了自己有关网络数据模型中最基本的两个概念(网线和结点)的理解。
在这个框架之下,又分析了网络拓扑关系的建立过程,得出了网络拓扑关系获取的一般过程。
第二部先介绍了最短路径算法选择的有关问题,通过查阅有关文献发现,目前解决系统最短路径问题应用最为广泛的是Dijkstra算法的思想。
最后阐述了有关经典Dijkstra算法的主要思想并利用有关数据结构方面的知识写出了具体算法的实现过程。
关键词:网络拓扑网络数据模型Dijkstra算法目录摘要 (I)1. 引言............................................. - 1 -2. 网络拓扑关系的建立................................. - 2 -2.1网络数据模型的基本概念 (2)2.2网络拓扑关系的获取 (2)3.最短路径算法 (5)3.1算法选择 (5)3.2传统D IJKSTRA算法的主要思想 (5)3.3经典D IJKSTRA算法的实现 (6)参考文献.............................................. - 8 - 附录................................................ - 9 -1. 引言随着地理信息系统产业的建立和数字化信息产品在全世界的普及,地理信息系统已经深入到各行各业。
其中,网络分析是地理信息系统(GIS)最主要的功能之一。
对地理网络(如交通网络)、城市基础设施网络(如各种网线、电力网线、电话网线、供排水网线等)进行地理分析和模型化,是地理信息系统中网络分析的主要目的。
AE开发之基于几何网络的最短路径分析1、实习目的本次实习目的在于熟练掌握ArcGIS Engine开发工具并能够通过C#语言在VS 2010开发环境中完成查询几何网络的最短路径分析的功能。
2、实习时间2015年5月23日星期六3、实习容3.1实验环境操作系统:Windows 2007二次开发平台:VS 2010开发环境、ArcGIS Desktop10.0、AE开发组件3.2实验任务完成基于几何网络分析的最短路径查询功能,即实现通过在几何网络地图中指定起始点,能够查询经过起始点的最短路线,并能够通过缩放功能在地图窗口居中显示。
3.3实验步骤3.3.1新建项目选择\文件\新建项目,如图选择项目类型中Visual C#,再选择Windows Application,记为“FindShortPath”,点击确定。
3.3.2添加控件3.3.3控件绑定因为添加的控件只是单独存在,但是程序需要各控件间协同工作,因此要进行控件绑定。
3.3.4创建几何网络1.在ArcCataLog中新建个人地理数据库—“甘地的个人地理数据库”,然后新建要素数据集“road”,接着,鼠标右键选择要素数据集“road”,选择“导入要素类”,导入需要创建几何网络的要素类“主要公路”,输出要素类的名字改为“road”,如下图所示:2.鼠标右键选择要素数据集“road”,选择新建“几何网络”,则出现“新建几何网络”对话框,作如下图所示的一系列设置,最终得到几何网络“road_Net”。
至此,得到几何网络“road_Net”,如下图所示:3.3.5代码实现最短路径分析①设置ToolStrip1②添加代码private IActiveView m_ipActiveView;private IMap m_ipMap;//地图控件中地图private IGraphicsContainer pGC;//图形对象private bool clicked = false;int clickedcount = 0;private double m_dblPathCost = 0;private IGeometricNetwork m_ipGeometricNetwork;private IPointCollection m_ipPoints;//输入点集合private IPointToEID m_ipPointToEID;private IEnumNetEID m_ipEnumNetEID_Junctions;private IEnumNetEID m_ipEnumNetEID_Edges;private IPolyline m_ipPolyline;private IMapControl3 mapctrlMainMap = null;private void Form1_Load(object sender, EventArgs e){//对象初始化mapctrlMainMap = (IMapControl3)this.axMapControl1.Object;m_ipActiveView = axMapControl1.ActiveView;m_ipMap = m_ipActiveView.FocusMap;clicked = false;pGC = m_ipMap as IGraphicsContainer;}private void Findpath_Click(object sender, EventArgs e){mapctrlMainMap.CurrentTool = null;//设置鼠标样式axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;if (yerCount == 0){MessageBox.Show("请先加载几何网络数据!");return;}m_ipActiveView = axMapControl1.ActiveView;m_ipMap = m_ipActiveView.FocusMap;clicked = false;pGC = m_ipMap as IGraphicsContainer;ILayer ipLayer = m_ipMap.get_Layer(0);IFeatureLayer ipFeatureLayer = ipLayer as IFeatureLayer;IFeatureDataset ipFDS = ipFeatureLayer.FeatureClass.FeatureDataset;OpenFeatureDatasetNetwork(ipFDS);clicked = true;clickedcount = 0;pGC.DeleteAllElements();}private void SolvePath_Click(object sender, EventArgs e){axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;if (SolvePathGan("Weight"))//先解析路径{IPolyline ipPolyResult = PathPolyLine();//最后返回最短路径clicked = false;if (ipPolyResult.IsEmpty){MessageBox.Show("没有路径可到!!");}else{IRgbColor color = new RgbColorClass();color.Red = 255;color.Blue = 64;color.Green = 128;LineElementClass element = new LineElementClass();ILineSymbol linesymbol = new SimpleLineSymbolClass();linesymbol.Color = color as IColor;linesymbol.Width = 3;element.Geometry = m_ipPolyline;element.Symbol = linesymbol;pGC.AddElement(element, 0);m_ipActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);axMapControl1.FlashShape(element.Geometry);MessageBox.Show("路径经过" + m_ipEnumNetEID_Edges.Count + "条线" + "\r\n" + "经过节点数为" + m_ipEnumNetEID_Junctions.Count + "\r\n" + "路线长度为" + m_ipPolyline.Length.ToString("#######.##") + "\r\n", "几何路径信息");}}}//路径缩放功能private void SuoFang_Click(object sender, EventArgs e){if (m_ipPolyline == null){MessageBox.Show("当前没有执行路径查询!!!请确认!");}else{this.axMapControl1.Extent = m_ipPolyline.Envelope;}}#region 自定义路径查询函数public void OpenFeatureDatasetNetwork(IFeatureDataset FeatureDataset){CloseWorkspace();if (!InitializeNetworkAndMap(FeatureDataset))Console.WriteLine("打开network出错");}//关闭工作空间private void CloseWorkspace(){m_ipGeometricNetwork = null;m_ipPoints = null;m_ipPointToEID = null;m_ipEnumNetEID_Junctions = null;m_ipEnumNetEID_Edges = null;m_ipPolyline = null;}//初始化几何网络和地图private bool InitializeNetworkAndMap(IFeatureDataset FeatureDataset){IFeatureClassContainer ipFeatureClassContainer;IFeatureClass ipFeatureClass;IGeoDataset ipGeoDataset;ILayer ipLayer;IFeatureLayer ipFeatureLayer;IEnvelope ipEnvelope, ipMaxEnvelope;double dblSearchTol;INetworkCollection ipNetworkCollection = FeatureDataset as INetworkCollection;int count = ipNetworkCollection.GeometricNetworkCount;//获取第一个几何网络工作空间m_ipGeometricNetwork = ipNetworkCollection.get_GeometricNetwork(0);INetwork ipNetwork = m_work;if (m_ipMap != null){ipFeatureClassContainer = m_ipGeometricNetwork as IFeatureClassContainer;count = ipFeatureClassContainer.ClassCount;for (int i = 0; i < count; i++){ipFeatureClass = ipFeatureClassContainer.get_Class(i);ipFeatureLayer = new FeatureLayerClass();ipFeatureLayer.FeatureClass = ipFeatureClass;for (int j = 0; j < m_yerCount; j++){if (m_ipMap.get_Layer(j).Name.ToUpper() == .ToUpper()){continue;}}}}count = m_yerCount;ipMaxEnvelope = new EnvelopeClass();for (int i = 0; i < count; i++){ipLayer = m_ipMap.get_Layer(i);ipFeatureLayer = ipLayer as IFeatureLayer;ipGeoDataset = ipFeatureLayer as IGeoDataset;ipEnvelope = ipGeoDataset.Extent;ipMaxEnvelope.Union(ipEnvelope);}m_ipPointToEID = new PointToEIDClass();m_ipPointToEID.SourceMap = m_ipMap;m_ipPointToEID.GeometricNetwork = m_ipGeometricNetwork;double dblWidth = ipMaxEnvelope.Width;double dblHeight = ipMaxEnvelope.Height;if (dblWidth > dblHeight)dblSearchTol = dblWidth / 100;elsedblSearchTol = dblHeight / 100;m_ipPointToEID.SnapTolerance = dblSearchTol;return true;}//返回路径的几何体public IPolyline PathPolyLine(){IEIDInfo ipEIDInfo;IGeometry ipGeometry;if (m_ipPolyline != null) return m_ipPolyline;m_ipPolyline = new PolylineClass();IGeometryCollection ipNewGeometryColl = m_ipPolyline as IGeometryCollection;//引用传递ISpatialReference ipSpatialReference = m_ipMap.SpatialReference;IEIDHelper ipEIDHelper = new EIDHelper();ipEIDHelper.GeometricNetwork = m_ipGeometricNetwork;ipEIDHelper.OutputSpatialReference = ipSpatialReference;ipEIDHelper.ReturnGeometries = true;IEnumEIDInfo ipEnumEIDInfo = ipEIDHelper.CreateEnumEIDInfo(m_ipEnumNetEID_Edges);int count = ipEnumEIDInfo.Count;ipEnumEIDInfo.Reset();for (int i = 0; i < count; i++){string[] info;info = new string[count];ipEIDInfo = ipEnumEIDInfo.Next();ipGeometry = ipEIDInfo.Geometry;ipNewGeometryColl.AddGeometryCollection(ipGeometry as IGeometryCollection);info[i] = m_ipPolyline.Length.ToString();}return m_ipPolyline;}public bool SolvePathGan(string WeightName){try{int intJunctionUserClassID;int intJunctionUserID;int intJunctionUserSubID;int intJunctionID;IPoint ipFoundJunctionPoint;ITraceFlowSolverGEN ipTraceFlowSolver = new TraceFlowSolver() as ITraceFlowSolverGEN;INetSolver ipNetSolver = ipTraceFlowSolver as INetSolver;if (m_ipGeometricNetwork == null){return false;}INetwork ipNetwork = m_work;ipNetSolver.SourceNetwork = ipNetwork;INetElements ipNetElements = ipNetwork as INetElements;if (m_ipPoints == null){ MessageBox.Show("请选择点!!"); return false; }int intCount = m_ipPoints.PointCount;//这里的points 有值吗?////定义一个边线旗数组//*********最近点***************//////////IJunctionFlag[] pJunctionFlagList = new JunctionFlag[intCount];for (int i = 0; i < intCount; i++){INetFlag ipNetFlag = new JunctionFlag() as INetFlag;IPoint ipJunctionPoint = m_ipPoints.get_Point(i);//查找输入点的最近的网络点m_ipPointToEID.GetNearestJunction(ipJunctionPoint, out intJunctionID, out ipFoundJunctionPoint);ipNetElements.QueryIDs(intJunctionID, esriElementType.esriETJunction, out intJunctionUserClassID, out intJunctionUserID, out intJunctionUserSubID);erClassID = intJunctionUserClassID;erID = intJunctionUserID;erSubID = intJunctionUserSubID;IJunctionFlag pTemp = (IJunctionFlag)(ipNetFlag as IJunctionFlag);pJunctionFlagList[i] = pTemp;}ipTraceFlowSolver.PutJunctionOrigins(ref pJunctionFlagList);INetSchema ipNetSchema = ipNetwork as INetSchema;INetWeight ipNetWeight = ipNetSchema.get_WeightByName(WeightName);INetSolverWeights ipNetSolverWeights = ipTraceFlowSolver as INetSolverWeights;ipNetSolverWeights.FromToEdgeWeight = ipNetWeight;//开始边线的权重ipNetSolverWeights.ToFromEdgeWeight = ipNetWeight;//终止边线的权重object[] vaRes = new object[intCount - 1];//通过findpath得到边线和交汇点的集合ipTraceFlowSolver.FindPath(esriFlowMethod.esriFMConnected,esriShortestPathObjFn.esriSPObjFnMinSum,outm_ipEnumNetEID_Junctions, out m_ipEnumNetEID_Edges, intCount - 1, ref vaRes);m_dblPathCost = 0;for (int i = 0; i < vaRes.Length; i++){double m_Va = (double)vaRes[i];m_dblPathCost = m_dblPathCost + m_Va;}m_ipPolyline = null;return true;}catch (Exception ex){Console.WriteLine(ex.Message); return false;}#endregion}private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e){if (clicked != true)return;IPoint ipNew;if (m_ipPoints == null){m_ipPoints = new Multipoint();}ipNew = m_ipActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);object o = Type.Missing;m_ipPoints.AddPoint(ipNew, ref o, ref o);IElement element;ITextElement textelement = new TextElementClass();element = textelement as IElement;clickedcount++;textelement.Text = clickedcount.ToString();element.Geometry = m_ipActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);pGC.AddElement(element, 0);m_ipActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}3.4实验结果在得到的窗口中加载“甘地的个人地理数据库”(在压缩包中有)中的几何网络“road_Net”,将几何网络地图加载到地图显示窗口中,如下图所示:点击图标添加起始点,效果如下图:然后点击图标,计算最短路径,效果如下图:最后点击图标得到最短路径的缩放,效果如下图:这样就完成了最短路径的查询分析和显示的功能。
基于GIS的城市交通分析与优化城市交通是现代城市发展中一个重要的组成部分,影响着城市的发展速度、居民生活质量以及社会经济活动的效率。
为了解决城市交通中存在的问题并优化交通网络,人们采用了基于地理信息系统(GIS)的城市交通分析与优化方法。
基于GIS的城市交通分析主要通过收集、整理和处理与交通相关的地理数据,利用GIS技术进行交通网络分析、交通流量模拟和交通问题诊断,从而提出合理的交通优化方案。
本文将从三个方面探讨基于GIS的城市交通分析与优化方法。
首先,基于GIS的城市交通分析主要依靠地理数据的收集和处理。
这包括道路网络数据、交通信号灯数据、交通流量数据等。
通过这些数据,可以建立城市交通网络模型,并基于此模型进行分析。
例如,利用道路网络数据,可以研究道路网络的拥堵情况、交通流量分布等,从而识别交通瓶颈,找到优化的空间。
其次,基于GIS的城市交通分析通过交通网络分析和交通流量模拟,揭示了交通系统的性能和问题。
交通网络分析是指利用GIS技术对城市道路网络进行网络分析,如路径分析、最短路径分析等。
通过这些分析,可以了解到不同区域之间最佳路线选择、旅行时间和距离等信息,为交通规划和决策提供依据。
另一方面,交通流量模拟是指利用GIS技术对交通流进行模拟和仿真,以评估交通系统性能。
例如,可以模拟高峰期的交通流量分布,预测拥堵情况,并提出相应的交通改善方案。
最后,基于GIS的城市交通分析提出了交通优化的方案。
通过对交通网络和交通流量的综合分析,可以确定优化措施,从而提高交通系统的效率和安全性。
例如,可以优化交通信号配时,改善交通流动性;可以优化道路布局,减少拥堵现象;可以优化公共交通路线,提高公共交通服务水平等。
这些优化方案通过GIS技术的支持,可以进行模拟和评估,便于决策者制定合理的交通规划和政策。
基于GIS的城市交通分析与优化方法在实际应用中取得了一定的成果。
从城市规划的角度来看,它为交通规划提供了科学的依据;从交通管理的角度来看,它提高了交通系统的效率和安全性;从居民生活质量的角度来看,它减少了交通拥堵和旅行时间,提升了出行效率。
基于GIS的城市道路网最短路径分析摘要运用gis网络分析功能,针对城市道路网的特点,建立了基于路段连接的道路网络模型,并选择可达性作为道路权重对道路网进行了最短路径分析。
对经典的dijkstra算法加以改进,提出了求解道路网任意两点间最短路径的算法,该算法搜索速度快,具有较强的适用性。
关键词最短路径;可达性;道路网中图分类号 tp393 文献标识码 a 文章编号1674-6708(2010)17-0092-020 引言随着计算机和地理信息科学的发展,地理信息系统因其强大的功能得到日益广泛和深入的应用。
网络分析作为gis最主要的功能之一,在电子导航、交通旅游、城市规划以及电力、通讯等各种管网、管线的布局设计中发挥了重要的作用,通用的网络分析功能包括路径分析、资源分配、连通分析、流分析等。
网络分析中最基本和最关键的问题是最短路径问题,它作为许多领域中选择最优问题的基础,在交通网络分析系统中占有重要地位。
从道路网络模型的角度看,最短路径分析就是在指定道路网络的两节点间找出一条阻碍强度最小的路径。
根据阻碍强度的不同定义,最短路径不仅仅指一般地理意义上的距离最短,还可以引申到其它的度量,如时间、费用、线路容量等。
相应地,最短路径问题就成为最快路径问题、最低费用问题等。
因此,城市道路网作为一种大型网络设施有其本身的特征。
它一方面包含网络本身的拓扑特征;另一方面还包含了大量反应地理位置特征的几何数据。
本文根据道路网的特点,运用gis网络分析功能对道路网络模型、道路的权重选择以及快速寻求路网中两节点间的最短路径算法分别进行了研究。
1 道路网模型及权重设置1.1 道路网模型建立城市道路网主要由众多道路相交、相连构成。
在纵横交织、错综复杂的道路网络中,道路间的地理位置关系相当复杂,一条道路可能与若干条道路相交相连,且其相交相连的模式复杂。
为了避免过多地考虑道路间的拓扑关系,抽取道路网中道路交叉路口作为分析对象,并对道路以交叉路口为结点进行分割,成为路段。
这样,整个网络图将由交叉路口点和路段组成,并定义交叉路口点为网络的结点,路段为网络的弧。
从而建立基于路段连接的网络模型,其模型形式表述为:式中,rw代表道路网络;n代表结点集;r代表路段集合,其元素为有序对,表示由结点x到结点y存在一条有向通路;lr代表路段长度集合,其元素表示有向路段的加权长度。
其中,路段的加权长度是指根据目标函数要求,综合各种动态实时信息和静态属性信息后所得的路段参数,而并非真实意义下的长度。
1.2 道路网权重选择在交通路网中,两点间最优路径算法的优劣主要受到2个因素的影响,即所使用的最短路径算法和所选择的道路权重。
最短路径算法是路径选择的搜索工具,决定了如何在庞大的路网数据库中找到最佳的可行路径。
道路权重则是路径选择的搜索指标,是最短路径算法的依据。
因此,道路权重的选择直接影响到最优路径算法的合理性。
一个城市的道路网络由不同等级的道路组成,不同等级的道路的通行能力和功能要求均不相同。
只有整个城市的交通负载根据出行者目的的不同,均衡分布在不同等级的道路上,城市的路网才能得到最有效的利用。
因此单纯的选择距离、时间或道路的通行能力作为道路权重都不太客观,需要选择一种比较综合的指标作为道路权重。
可达性是hansen于1959年首次提出的概念,用于定义交通网络中各结点间相互作用机会的大小。
其表述的是路网中任意点之间通达的可能性及难易程度,数学上指单位时间内可实现通达的直线距离[1],即为可达能力(km/m),是可达性的量度。
可达性同时考虑了时间和距离的因素,把道路交通的固定设施和移动工具有机结合起来,而且避免了以道路通行能力作为权重可能造成的城市路网全局负载问题。
因此以可达性为道路权重是一个比较综合的指标,具有更大的合理性。
2 最短路径算法最短路径问题的算法有很多种,包括基于限制条件的深度优先搜索算法、dijkstra算法、floyd算法、a*算法等,各种算法在空间复杂度、时间复杂度、易实现性等方面各具特色。
其中,采用启发式策略的dijkstra算法是目前公认的求解最短路问题的经典算法。
但dijkstra算法在基于网络的权矩阵求解最短路问题的计算机算法和程序中,运用了关联矩阵、邻接矩阵和距离矩阵的概念。
在存储图形数据和运算时,需要定义n×n的数组(其中n为网络的结点数),当网络的结点数较大时,将占有大量的计算机内存。
如果不对dijkstra算法进行优化,该算法很难在实际中得到应用。
在原始的dijkstra算法中,每次在临时标记点中搜索路径最短的结点时都要遍历所有的临时标记结点。
解决办法就是将临时标记结点按照最短路径排序,每个搜索过程不必全部遍历或者较少地遍历临时标记点。
或者尽量减少最短路径分析过程中搜索的临时结点数量。
基于此思想,提出了以下优化算法。
2.1 算法原理利用两点之间直线最短的原理,在道路网中,如果两结点间存在一条边,则该边为两结点间的最短路径。
若不存在一条边,则连接起、止点的直线段代表了一个路线的趋势,顺着连线方向的某条边是最短路径的可能性最大。
依据此思想,可以构造2个矢量,矢量一以当前结点为起点,目标点为终点;矢量二以当前结点为起点,当前结点的邻接点为终点。
将矢量二的方向值与矢量一的方向值相减得到两矢量间的夹角。
由夹角最小的边组成的路径最接近于最短路径。
由于只依据矢量夹角作为求解最短路径中路段集合的要素,可能造成求得的路径因左右方向的震荡而增加路径的总长度,使求得的解大于实际最短路经长,所以在每次搜索最短路径顶点时,将当前结点的邻接点按照矢量夹角大于零和小于零分为两组,分别在两组中选取矢量夹角绝对值的最小值对应的结点。
算法采用双向搜索,从起点s开始进行正向搜索,同时从终点t进行逆向搜索。
两个方向每一步都要搜索与指定直线段左右两侧各一条夹角最小的边,直到二者会合或直到目标点,最后取两个方向搜索到的距离最短的路径为所求解。
2.2 算法具体步骤假设需要求解最短路径的两个结点分别为s点和t点,其中起点为s、终点为t。
定义ds(i)表示源结点s到结点i的加权距离;dt(j)表示目标点t到结点j的加权距离; ps(m)、pt(m)表示结点m的状态,分为未标记结点(0)和标记结点(1)两种,其中ps表示正向搜索(从s出发)过程中的状态,pt表示逆向搜索(从t出发)过程中的状态。
第一步:初始化:对所有结点i,若i=s,则ds(i)=0, ps(i)=1;若i=t,则dt(i)=0, pt(i)=1;否则ds(i)→∞, dt(i)→∞,ps(i)=0, pt(i)=0。
并定义一个数变量k作为循环变量,初始化为k=0。
第二步:判断s与t之间是否邻接,若邻接,则连接两端点的边即为所求最短路径。
否则,转第三步。
第三步:令s、t分别为两棵二叉树的根节点,分别从s、t出发,在直线段st、ts左右两侧各寻找一条与、夹角最小的边,把搜索到的边加入对应的二叉树。
设从s点出发搜寻到的两条边的另一端点分别为a1、a1’,计算sa1、sa1’的加权距离,分别记为ds(a1)、ds(a1’);从t点出发搜寻到的两条边的另一端点分别为b1、b1’,记tb1、tb1’的加权距离分别为dt(b1)、dt(b1’)。
第四步:将ds(a1)、ds(a1’)作为当前点a1、a1’的标记值,d t(b1)、dt(b1’) 作为当前点b1、b1’的标记值。
也就是将起点或终点至该临时标记点子路径上所有边的权值之和作为当前点的标记值。
同时ps(a1)、ps(a1’)、 pt(b1)、pt(b1’)均变为1。
第五步:用a1、a1’分别代替s,b1、b1’分别代替t,然后变量k 自增k=k+1,重复第二、三、四步,但第三步中是从a1(a1’)、b1(b1’)出发,在直线段a1t(a1’t)、tb1(tb1’)左右两侧各寻找一条与夹角绝对值最小的边。
把搜索到的边加入对应的二叉树,对二叉树的当前点分别计算标记值并作标记。
以此类推,直至an,bn会合于一点,即正向和逆向搜索都对同一点进行了标记,则点列s,a1,…,an(bn),…,b1,t组成可能最短路径,路径长度为ds(an)+ dt(bn)。
若二者没有会合,也即双向搜索都未对同一点进行标记,则正向搜索到终点t,逆向搜索到起点s,生成两棵特殊的二叉树。
相应方向已标记过的点不在搜索范围之内。
第六步:搜索结束后,若会合于一点,则取会合点处的标记值之和ds(an)+ dt(bn)作为可能最短路径长度;若没有会合,则取终点t(正向搜索)或起点s(逆向搜索)处的标记值ds(t)、dt(s)作为可能最短路径长度。
取其中最小值min{ ds(an)+ dt(bn), ds(t), dt(s)}即为所求最短路径长度。
如果所求最短路径中包含会合点,则最短路径由会合点开始沿与之相关联的两条边依次寻找求解的最短路径的标记结点,加入路径队列,直至s、t。
若没有会合点,则从起点s或终点t开始,在二叉树中顺次寻找所求最短路径的相关结点,直至达到t或s,便得到最短路径序列。
搜索流程如图1。
3 结论本文根据城市交通道路网的特点,建立了道路网数据模型,并在综合考虑人们出行时的时间消耗和能量消耗的情况下,选择可达性作为道路权重,以此为搜索指标进行最短路径分析。
本文所用最短路径算法对经典的dijkstra算法进行了改进,在每次搜索过程中,不必遍历图中所有未标记的结点,只搜索当前结点的邻接结点。
对于实际的道路网,每个结点的邻接点个数一般为2—5个,较之dijkstra算法大大减少了搜索范围。
而且求解的只是源点到终点间的最短路径,搜索的速度快,也增加了适用性。
参考文献[1]白尘.交通路网中最优路径算法的道路权重选择.中国管理信息化,2009,12(15):54-56.[2]鲍培明.距离寻优中dijkstra算法的优化.计算机研究与发展,2001,38(3):307-311.[3]王行风,贾凌.gis支持下的城市交通网络最短路径研究. 计算机与现代化,2005,115(3):9-12.[4]刘云翔,陈荦,李军,陈宏盛.基于城市道路网的最短路径分析解决方案.小型微型计算机系统,2003,24(7):1390-1393.[5]赵春燕,王国华,周军.支持城市多种交通方式的最佳路径分析.测绘信息与工程,2009,34(4):8-10.。