Free cookie consent management tool by TermsFeed Policy Generator

source: branches/RoutePlanning/HeuristicLab.Problems.RoutePlanning.Test/Program.cs @ 8418

Last change on this file since 8418 was 8408, checked in by spimming, 12 years ago

#1894

  • restructured test program
  • new, faster version of AStar algorithm
  • moved method to obtain edge max speed to way
File size: 7.0 KB
Line 
1
2using System;
3using System.Diagnostics;
4using System.IO;
5using System.Xml;
6using HeuristicLab.Algorithms.GraphRouting;
7using HeuristicLab.Problems.RoutePlanning.Graph;
8using HeuristicLab.Problems.RoutePlanning.Osm;
9using HeuristicLab.Problems.RoutePlanning.Osm.Data;
10namespace HeuristicLab.Problems.RoutePlanning.Test {
11  class Program {
12    static void Main(string[] args) {
13      // For testing openstreetmap data is used
14      // http://www.openstreetmap.org
15      // Map data © OpenStreetMap contributors, CC BY-SA
16
17      string file1 = @"..\..\OsmTestFiles\test.osm";
18      string file2 = @"..\..\OsmTestFiles\testNode1.osm";
19      string file3 = @"..\..\OsmTestFiles\testWay1.osm";
20      string file4 = @"..\..\OsmTestFiles\testRelation1.osm";
21      string file5 = @"..\..\OsmTestFiles\test_mid.osm";
22      string file6 = @"C:\dev\osmfiles\oberosterreich.highway.osm";
23
24      //TestD(file5, 529102170, 1001363194, true, false); // inz - inz
25      //Test(file5, 529102170, 1001363194, true, false); // inz - inz
26      //Test(file6, 529102170, 1001363194, true, false); // inz - inz
27
28      IDataSource ds = TestLoad(file6);
29      Graph.Graph graph = new Graph.Graph(ds);
30      TestRouter(new AStarAlgorithm(graph), 529102170, 31372732, false); // inz - hgb
31      TestRouter(new AStarAlgorithmV2(graph), 529102170, 31372732, false); // inz - hgb
32
33      //TestLoadAndRouter(file6, typeof(DijkstraAlgorithm), 529102170, 31372732, false, false); // inz - hgb
34      //TestLoadAndRouter(file6, typeof(AStarAlgorithm), 529102170, 31372732, false, false); // inz - hgb
35      //TestLoadAndRouter(file6, typeof(AStarAlgorithmV2), 529102170, 31372732, false, false); // inz - hgb
36
37      System.Console.Read();
38    }
39
40    private static long[] TestRouter(IRouter router, long sourceNodeId, long targetNodeId, bool showResult) {
41      Console.WriteLine("Test Router BEGIN ---------------------------------");
42      Console.WriteLine("Type: " + router.GetType());
43
44      Console.Write("Calculate route ... ");
45      var sw = Stopwatch.StartNew();
46      long[] result = router.Calculate(sourceNodeId, targetNodeId);
47      sw.Stop();
48      Console.WriteLine("done.");
49      Console.WriteLine("Execution Time: {0}", sw.Elapsed);
50      Console.WriteLine();
51      if (showResult) {
52        Console.WriteLine("Result: ");
53        foreach (long i in result) System.Console.Write(i + "; ");
54        Console.WriteLine();
55        Console.WriteLine();
56      }
57      Console.WriteLine("===================================================");
58      Console.WriteLine();
59      return result;
60    }
61
62    private static IDataSource TestLoad(string filepath) {
63      FileInfo file = new FileInfo(filepath);
64      Console.WriteLine("Test Load Data BEGIN ------------------------------");
65      Console.WriteLine("File name: {0}", file.Name);
66      Console.WriteLine();
67      Console.Write("Loading data ... ");
68      var sw = Stopwatch.StartNew();
69      XmlDataSource xmlDs = new XmlDataSource(filepath);
70      sw.Stop();
71      Console.WriteLine("done.");
72      Console.WriteLine("Time: {0}", sw.Elapsed);
73      Console.WriteLine();
74      Console.WriteLine("===================================================");
75      Console.WriteLine();
76      return xmlDs;
77    }
78
79    private static void TestLoadAndRouter(string filepath, Type routerType, long sourceNodeId, long targetNodeId, bool showResult, bool writeResultFile) {
80      FileInfo file = new FileInfo(filepath);
81      Console.WriteLine("Test Load and Route BEGIN -------------------------");
82      Console.WriteLine("File name: {0}", file.Name);
83      Console.WriteLine();
84      Console.Write("Loading data ... ");
85      var sw = Stopwatch.StartNew();
86      XmlDataSource xmlDs = new XmlDataSource(filepath);
87      sw.Stop();
88      Console.WriteLine("done.");
89      Console.WriteLine("Loading Time: {0}", sw.Elapsed);
90      Console.WriteLine();
91      Graph.Graph graph = new Graph.Graph(xmlDs);
92      IRouter router = (IRouter)Activator.CreateInstance(routerType, graph);
93      Console.Write("Calculate route ... ");
94      sw = Stopwatch.StartNew();
95      long[] result = router.Calculate(sourceNodeId, targetNodeId);
96      sw.Stop();
97      Console.WriteLine("done.");
98      Console.WriteLine("Execution Time: {0}", sw.Elapsed);
99      Console.WriteLine();
100      if (showResult) {
101        Console.WriteLine("Result: ");
102        foreach (long i in result) System.Console.Write(i + "; ");
103        Console.WriteLine();
104        Console.WriteLine();
105      }
106      if (writeResultFile) {
107        string dt = DateTime.Now.ToString("yyyyMMddhhmmss_");
108        string fn = Path.GetFileNameWithoutExtension(file.Name);
109        string resultFile = dt + fn + "_" + sourceNodeId + "-" + targetNodeId + ".gpx";
110        Console.WriteLine("Result file: {0}", resultFile);
111        WriteGPXFile(graph, result, resultFile);
112      }
113      Console.WriteLine("===================================================");
114      Console.WriteLine();
115    }
116
117    private static void WriteGPXFile(Graph.Graph graph, long[] route, string file) {
118      XmlWriterSettings settings = new XmlWriterSettings();
119      settings.Indent = true;
120      settings.IndentChars = ("   ");
121
122      using (XmlWriter writer = XmlWriter.Create(file, settings)) {
123        writer.WriteStartElement("gpx", "http://www.topografix.com/GPX/1/0");
124        writer.WriteAttributeString("version", "1.1");
125        writer.WriteAttributeString("creator", "cloudia");
126
127        foreach (long nodeId in route) {
128          Vertex<Node> node = graph.GetVertex(nodeId);
129          writer.WriteStartElement("wpt");
130          writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
131          writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
132          writer.WriteEndElement(); // wpt
133        }
134
135        //writer.WriteStartElement("rte");
136        //foreach (long nodeId in route) {
137        //  Vertex<Node> node = graph.GetVertex(nodeId);
138        //  writer.WriteStartElement("rtept");
139        //  writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
140        //  writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
141        //  writer.WriteEndElement(); // rtept
142        //}
143        //writer.WriteEndElement(); // rte
144
145        //writer.WriteStartElement("trk");
146        //writer.WriteElementString("name", "RoutePath");
147        ////writer.WriteEndElement(); // name
148        //writer.WriteStartElement("trkseq");
149        //foreach (long nodeId in route) {
150        //  Vertex<Node> node = graph.GetVertex(nodeId);
151        //  writer.WriteStartElement("trkpt");
152        //  writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
153        //  writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
154        //  writer.WriteEndElement(); // trkpt
155        //}
156        //writer.WriteEndElement(); // trkseq
157        //writer.WriteEndElement(); // trk
158
159        writer.WriteEndElement(); // gpx
160      }
161    }
162  }
163}
Note: See TracBrowser for help on using the repository browser.