gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:4331回复:7

[分享]GIS中最短路径的实现

楼主#
更多 发布于:2005-06-29 14:03
<TABLE cellSpacing=0 cellPadding=0 width=778 border=0>

<TR>
<TD vAlign=top width=569 height=398>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width=520 border=0>

<TR>
<TD height=379>
<TABLE height=83 cellSpacing=1 cellPadding=1 width=517 bgColor=#999999 border=0>

<TR>
<TD class=main width=513 bgColor=#e9e9e9 height=81>
<DIV align=center>
<TABLE height=56 cellSpacing=0 cellPadding=0 width=489 border=0>

<TR>
<TD class=main width=489 height=56>  本文提出了一种基于矢量角度的最短路径搜索算法,设计出一种类似于面向对象的数据存储结构来存储网络图中的节点及弧段对象,在最短路径的搜索上引入矢量夹角标量值做为搜索因子,充分利用了网络图中各点元素和线元素间的拓扑关系,提高了搜索的趋势性,同时还考虑了各弧段的长度值(或权值),较好的将网络图中对象的空间信息和属性信息相结合……</TD></TR></TABLE></DIV></TD></TR></TABLE>
<P align=justify>  <STRONG>1 引言</STRONG><br><br>  随着地理信息产业的建立和数字化信息产品在全世界的普及,地理信息系统将深入到各行各业甚至各家各户,成为人们生产、生活学习和工作中不可缺少的工具和助手。<br><br>  地理信息系统中网络分析功能的主要目的是对地理网络(如交通网络)、城市基础设施网络(如各种网线、电力线、电话线、供排水管线等)进行地理分析和模型化。<br><br>  最短路径问题是地理信息系统网络分析中的最基本最关键的问题,在交通网络结构的分析,交通运输线路的选择,通讯线路的建造与维护,运输货流的最小成本分析,城市公共交通网络的规划等,都有直接应用的价值。<br><br>  关于最短路径问题,目前为人们所公认的最好求解方法,是1959年由E.W.Dijkstar提出的标号法,但具体实现中在存储空间及运行效率上还存在着一定的问题。<br><br>  本文从图形数据的存储结构及最短路径顶点的搜索策略两个方面对Dijkstra算法进行了改进,提出了一种基于矢量角度的最短路径搜索算法。<br></P></TD></TR></TABLE></DIV></TD>
<TD vAlign=top>
<DIV align=right>
<TABLE cellSpacing=0 cellPadding=0 width=197 border=0>

<TR>
<TD></TD></TR>
<TR>
<TD bgColor=#e9e9e9 height=65>
<DIV align=center> </DIV></TD></TR>
<TR>
<TD vAlign=top bgColor=#e9e9e9 height=311>
<DIV align=center></DIV>
<DIV align=center></DIV>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width=169 border=0>

<TR>
<TD class=main width=169 height=108>
<P><br><br><IMG src="http://www.gisforum.net/magazine/images/arrow.gif" border=0> <br> <br>  | <br><a href="http://www.gisforum.net/magazine/index.htm" target="_blank" ><IMG src="http://www.gisforum.net/magazine/images/arrow.gif" border=0> </A><br></P></TD></TR></TABLE><br></DIV></TD></TR></TABLE></DIV></TD></TR></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=778 border=0>

<TR>
<TD height=1108>
<DIV align=center>
<TABLE cellSpacing=0 cellPadding=0 width=734 border=0>

<TR>
<TD height=1108>
<P><br>  <STRONG>2 道路网络数据结构</STRONG><br><br>  构造类似于面向对象的数据结构存储网络图:<br><br>  Public Type Mynode(点结构)<br><br>    Dim NodeID As Integer '节点ID,唯一标识节点 <br><br>    Dim AdjoinNum As Integer '邻接弧段数量<br><br>    Dim AdjoinArcID() As Integer '邻接弧段ID<br><br>    Dim AdjoinNodeID() As Integer '邻接节点ID<br><br>    Dim AdjoinClamp() As Double '指向邻接节点的矢量的角度<br><br>  End Type<br><br>  Public Type MyArc(弧结构)<br><br>    Dim ArcID As Integer '弧段ID,唯一标识弧段<br><br>    Dim Length As Double '弧段长<br><br>  End Type<br><br>  其中节点对象中的三个数组大小在初始化时利用邻接弧段数量设置大小,因此对应不同的节点对象其大小是不固定的,使用此种结构,对于有向图不会造成数据的冗余,而对应于无向图也仅多存储了一倍的弧段ID,邻接节点ID及矢量角度,相对于经典Dijkstra算法来说,需要的存储空间仍较小。对于弧段对象来说,其中的Length可以设置为弧段长度,也可根据需要设置为时间、费用等相应的权值。<br><br>  <STRONG>3 算法原理</STRONG><br><br>  由两点之间直线最短的定理,构造一条理想最短路径(如图一中的AB),这条直线段一定是A、B两点间弧段中距离最短的一条。但实际上这条直线段作为一段道路存在的可能性极小,但这条从起点到终点的直线段却代表了一个路线的趋势,从概率的角度,顺着这个方向的某些路段的集合组成最短路径的可能性较大。<br><br>                  <IMG src="http://www.gisforum.net/magazine/images/picxmgl01.jpg"> <br><br>  以矢量夹角标量值做为最短路径顶点选取的第一要素。<br><br>  如图一,求解A、B两点间的最短路径。∠1为矢量Aa与矢量AB间夹角的标量值,当前节点的每个邻接节点都对应一个角度标量值,按照标量值的正负值大小,构造标识分别为正负的两个队列,两个队列均根据节点对应标量值的绝对值从小到大进行排序。<br><br>  分别从正负两个队列中选出排在最前位的节点,加入到最短路径树中。<br><br>  除第一次搜索外,其余过程中都需要判断搜索到的节点是否已存在于最短路径树中,如果该节点已存在于最短路径树中,则需要比较本次搜索过程结束后该节点信息与对应的最短路径树节点信息。<br><br>  假设在第m次搜索过程中已确定指向节点S的树节点Sm,之后在第n次(n ≥ m)搜索得到的树节点Sn再次指向网络图中节点S。<br><br>  当Sn的Length值大于Sm的Length值时,在Sn处停止搜索,如图二所示。<br><br>          <IMG src="http://www.gisforum.net/magazine/images/picxmgl02.jpg"> <br><br>  当Sn的Length值小于或等于Sm的Length值,如图三所示,将Sm之下的所有树节点移动到Sn之下,并依据Sn的Length值对应修改原Sm之下所有树节点(图示方框中所有树节点)的Length值。<br><br>          <IMG src="http://www.gisforum.net/magazine/images/picxmgl03.jpg"> <br><br>  <STRONG>4 算法实现</STRONG><br><br>  本算法在武汉市经济开发区道路网络图上得到实现。武汉市经济开发区道路网络图中共有节点371个,边653条。在ArcMap的VBA环境中,通过VB+ArcObjects的编程方式,由VB实现算法逻辑控制,ArcMap管理图形的显示与控制,实现在图形窗口中动态显示求得的最短路径以及选取组成最短路径的路段集合的过程。实现流程图如下:<br><br>            <IMG src="http://www.gisforum.net/magazine/images/picxmgl04.jpg"> <br><br>  在武汉市经济开发区道路图上任意选取六个节点,分别进行三次最短路径求解的实验,得出的参数如下表:</P>
<P align=justify>  <IMG src="http://www.gisforum.net/magazine/images/picxmgl05.jpg"><br>   其中:<br><br>  Arc Number表示的是最短路径经过的弧段数,单位为段;<br><br>  Node Number表示的是最短路径经过的结点个数,单位为个;<br><br>  Path Length表示的是最短路径的长度,单位为米;<br><br>  Modification在本文算法中表示的是求解过程中树节点修改次数,在Dijkstra算法中表示的是求解过程中节点标号的修改次数;<br><br>  Time表示的是求解最短路径花费的时间,单位为秒。<br><br>  由上表可以看到,在求解最短路径的过程中本文讨论的算法与传统的Dijkstra算法,最大的差别在于Modification。<br><br>  由于文中探讨的算法在求解最短路径过程中具有起、止点的方向性趋势,每次搜索过程中仅考虑当前节点的邻节点,故修改次数较小;而在Dijksra算法中,每次搜索过程中都将遍历所有未确定永久标号的节点,故修改次数较大。<br><br>  文中探讨的算法求解过程简单,速度快,求得的最短路径与用Dijkstra算法求得的最短路径相同或相近,所以该算法具有一定的实用性和可操作性。<br><br>  <STRONG>5 结论</STRONG><br><br>  在对于搜索技术性能评价的时候,在各种不同的情况下有着不同的要求,并非只注重最优解,而是注重在一定条件下的非劣解。虽然本文讨论的算法在道路较不规整时求得的最短路径可能有一定的误差,但是与最短路径的最优解相近,而非劣解,且在其他情况下都能求得最优解,求解的速度快,故具有一定的实用性和可操作性。<br><br>  由于实际情况的复杂性,为了减小算法在求解时产生的误差,使得算法有更好的适应性,有进一步研究道路网络图中拓扑关系的必要,增加矢量条件,真正使最短路径的求解过程简单快速,结果准确可信。<br></P></TD></TR></TABLE></DIV></TD></TR></TABLE>
[此贴子已经被作者于2005-6-29 14:04:17编辑过]
喜欢0 评分0
227jdydy
路人甲
路人甲
  • 注册日期2005-01-17
  • 发帖数4
  • QQ
  • 铜币111枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2005-06-30 01:10
完整的代码能给一个先?<a href="mailt27jdydy@sohu.com[em02" target="_blank" >27jdydy@sohu.com[em02</A>]
举报 回复(0) 喜欢(0)     评分
yztccy
路人甲
路人甲
  • 注册日期2005-09-02
  • 发帖数13
  • QQ
  • 铜币135枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-04-30 09:27
<P>好贴,学习中,楼主</P><img src="images/post/smile/dvbbs/em02.gif" />
举报 回复(0) 喜欢(0)     评分
sss_lzd
路人甲
路人甲
  • 注册日期2003-08-13
  • 发帖数62
  • QQ
  • 铜币268枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-05-11 13:28
<P>有没有源码呀</P>
<P><a href="mailtsss_lzd@126.com" target="_blank" >sss_lzd@126.com</A></P>
<P>谢谢</P>
举报 回复(0) 喜欢(0)     评分
jincheng76
路人甲
路人甲
  • 注册日期2006-07-19
  • 发帖数20
  • QQ
  • 铜币131枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2006-07-19 16:24
<P>源码需求。。。</P>
举报 回复(0) 喜欢(0)     评分
jincheng76
路人甲
路人甲
  • 注册日期2006-07-19
  • 发帖数20
  • QQ
  • 铜币131枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2006-07-19 16:25
<img src="images/post/smile/dvbbs/em05.gif" />
举报 回复(0) 喜欢(0)     评分
long56
路人甲
路人甲
  • 注册日期2006-03-24
  • 发帖数57
  • QQ
  • 铜币246枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2007-12-23 23:16
源码需求
举报 回复(0) 喜欢(0)     评分
ranbow52
路人甲
路人甲
  • 注册日期2009-02-13
  • 发帖数15
  • QQ
  • 铜币133枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2009-03-26 16:09
顶,要源代码
举报 回复(0) 喜欢(0)     评分
游客

返回顶部