Free cookie consent management tool by TermsFeed Policy Generator

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

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

#1894:

  • new implementation for priority queue
  • based on heap data structure
  • allow multiple keys
  • adapted test program
File size: 4.7 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      string file1 = @"..\..\OsmTestFiles\test.osm";
14      string file2 = @"..\..\OsmTestFiles\testNode1.osm";
15      string file3 = @"..\..\OsmTestFiles\testWay1.osm";
16      string file4 = @"..\..\OsmTestFiles\testRelation1.osm";
17      string file5 = @"..\..\OsmTestFiles\test_mid.osm";
18      string file6 = @"C:\dev\osmfiles\oberosterreich.highway.osm";
19
20      Test(file5, 529102170, 1001363194, true, false);
21      //Test(file6, 529102170, 1001363194, true, false);
22      //Test(file6, 529102170, 31372732, false, true); // inz - hgb
23      System.Console.Read();
24    }
25
26    private static void Test(string filepath, long sourceNodeId, long targetNodeId, bool showResult, bool writeResultFile) {
27      FileInfo file = new FileInfo(filepath);
28      Console.WriteLine("Test BEGIN ------------------------------");
29      Console.WriteLine("File name: {0}", file.Name);
30      Console.WriteLine();
31      Console.Write("Loading data ... ");
32      var sw = Stopwatch.StartNew();
33      XmlDataSource xmlDs = new XmlDataSource(filepath);
34      sw.Stop();
35      Console.WriteLine("done.");
36      Console.WriteLine("Loading Time: {0}", sw.Elapsed);
37      Console.WriteLine();
38      Graph.Graph graph = new Graph.Graph(xmlDs);
39      //IRouter router = new DijkstraAlgorithm(graph);
40      IRouter router = new AStarAlgorithm(graph);
41      Console.Write("Calculate route ... ");
42      sw = Stopwatch.StartNew();
43      long[] result = router.Calculate(sourceNodeId, targetNodeId);
44      sw.Stop();
45      Console.WriteLine("done.");
46      Console.WriteLine("Execution Time: {0}", sw.Elapsed);
47      Console.WriteLine();
48      if (showResult) {
49        Console.WriteLine("Result: ");
50        foreach (long i in result) System.Console.Write(i + "; ");
51        Console.WriteLine();
52        Console.WriteLine();
53      }
54      if (writeResultFile) {
55        string dt = DateTime.Now.ToString("yyyyMMddhhmmss_");
56        string fn = Path.GetFileNameWithoutExtension(file.Name);
57        string resultFile = dt + fn + "_" + sourceNodeId + "-" + targetNodeId + ".gpx";
58        Console.WriteLine("Result file: {0}", resultFile);
59        WriteGPXFile(graph, result, resultFile);
60      }
61      Console.WriteLine("=========================================");
62      Console.WriteLine();
63    }
64
65    private static void WriteGPXFile(Graph.Graph graph, long[] route, string file) {
66      XmlWriterSettings settings = new XmlWriterSettings();
67      settings.Indent = true;
68      settings.IndentChars = ("   ");
69
70      using (XmlWriter writer = XmlWriter.Create(file, settings)) {
71        writer.WriteStartElement("gpx", "http://www.topografix.com/GPX/1/0");
72        writer.WriteAttributeString("version", "1.1");
73        writer.WriteAttributeString("creator", "cloudia");
74
75        foreach (long nodeId in route) {
76          Vertex<Node> node = graph.GetVertex(nodeId);
77          writer.WriteStartElement("wpt");
78          writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
79          writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
80          writer.WriteEndElement(); // wpt
81        }
82
83        //writer.WriteStartElement("rte");
84        //foreach (long nodeId in route) {
85        //  Vertex<Node> node = graph.GetVertex(nodeId);
86        //  writer.WriteStartElement("rtept");
87        //  writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
88        //  writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
89        //  writer.WriteEndElement(); // rtept
90        //}
91        //writer.WriteEndElement(); // rte
92
93        //writer.WriteStartElement("trk");
94        //writer.WriteElementString("name", "RoutePath");
95        ////writer.WriteEndElement(); // name
96        //writer.WriteStartElement("trkseq");
97        //foreach (long nodeId in route) {
98        //  Vertex<Node> node = graph.GetVertex(nodeId);
99        //  writer.WriteStartElement("trkpt");
100        //  writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
101        //  writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
102        //  writer.WriteEndElement(); // trkpt
103        //}
104        //writer.WriteEndElement(); // trkseq
105        //writer.WriteEndElement(); // trk
106
107        writer.WriteEndElement(); // gpx
108      }
109    }
110  }
111}
Note: See TracBrowser for help on using the repository browser.