情景:在一个图中,已知经过的一串n节点信息,希望显示经过的路径。
数据组织:
点要素:存放图中的点信息,必含Id字段
线要素:存放编辑好的路径信息,必含“Start”和“end”字段,存放无向图的起始终止节点Id,隐含线的FID
实现语言:C#
数据结构:图的邻接表存储结构AdjacencyList<T>
1 public class AdjacencyList<T> //图的邻接表存储结构
2 public class Node<T> //表示链表中的表结点
3 public class Vertex<T>//表示存放于数组中的表头结点
这里在Node<T>类中增加了ArcId字段,用来存储线的FID。
首先读取点和线要素,初始化邻接表,初始化走过的节点数组。
View Code
1 public IPolyline FindPolyLine(string _start, string _end)
2 {
3 Node<string> TargetNode=null;
4 string strTargetLineId=string.Empty;
5 Vertex<string> head= pathDisplay.Find(_start);
6 if (head.firstEdge != null)
7 {
8
9 Node<string> tmp = head.firstEdge;
10 while (tmp != null)
11 {
12 if (_end==tmp.adjvex.data.ToString())
13 {
14 TargetNode=tmp;
15 }
16
17 tmp = tmp.next;
18 }
19 strTargetLineId=TargetNode.arcId;
20 }
21 IPolyline poline = dic_Id_Polyline[strTargetLineId];
22 return poline;
23 }
24 Dictionary<string, IPoint> dic_Id_Pt = new Dictionary<string, IPoint>();
25 Dictionary<string, IPolyline> dic_Id_Polyline = new Dictionary<string, IPolyline>();
26 AdjacencyList<string> pathDisplay = new AdjacencyList<string>();
为了实现轨迹的动画显示,应用了Threading空间中的Timer,用委托实现在AxMapControl中的动画显示。
参考文献:
http://www.cnblogs.com/abatei/archive/2008/06/06/1215114.html