Free cookie consent management tool by TermsFeed Policy Generator

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

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

#1894:

  • check if way has missing node references
  • check if attribute exists before using it
  • test program restructured
File size: 4.6 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      Console.Write("Calculate route ... ");
41      sw = Stopwatch.StartNew();
42      long[] result = router.Calculate(sourceNodeId, targetNodeId);
43      sw.Stop();
44      Console.WriteLine("done.");
45      Console.WriteLine("Execution Time: {0}", sw.Elapsed);
46      Console.WriteLine();
47      if (showResult) {
48        Console.WriteLine("Result: ");
49        foreach (long i in result) System.Console.Write(i + "; ");
50        Console.WriteLine();
51        Console.WriteLine();
52      }
53      if (writeResultFile) {
54        string dt = DateTime.Now.ToString("yyyyMMddhhmmss_");
55        string fn = Path.GetFileNameWithoutExtension(file.Name);
56        string resultFile = dt + fn + "_" + sourceNodeId + "-" + targetNodeId + ".gpx";
57        Console.WriteLine("Result file: {0}", resultFile);
58        WriteGPXFile(graph, result, resultFile);
59      }
60      Console.WriteLine("=========================================");
61      Console.WriteLine();
62    }
63
64    private static void WriteGPXFile(Graph.Graph graph, long[] route, string file) {
65      XmlWriterSettings settings = new XmlWriterSettings();
66      settings.Indent = true;
67      settings.IndentChars = ("   ");
68
69      using (XmlWriter writer = XmlWriter.Create(file, settings)) {
70        writer.WriteStartElement("gpx", "http://www.topografix.com/GPX/1/0");
71        writer.WriteAttributeString("version", "1.1");
72        writer.WriteAttributeString("creator", "cloudia");
73
74        foreach (long nodeId in route) {
75          Vertex<Node> node = graph.GetVertex(nodeId);
76          writer.WriteStartElement("wpt");
77          writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
78          writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
79          writer.WriteEndElement(); // wpt
80        }
81
82        //writer.WriteStartElement("rte");
83        //foreach (long nodeId in route) {
84        //  Vertex<Node> node = graph.GetVertex(nodeId);
85        //  writer.WriteStartElement("rtept");
86        //  writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
87        //  writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
88        //  writer.WriteEndElement(); // rtept
89        //}
90        //writer.WriteEndElement(); // rte
91
92        //writer.WriteStartElement("trk");
93        //writer.WriteElementString("name", "RoutePath");
94        ////writer.WriteEndElement(); // name
95        //writer.WriteStartElement("trkseq");
96        //foreach (long nodeId in route) {
97        //  Vertex<Node> node = graph.GetVertex(nodeId);
98        //  writer.WriteStartElement("trkpt");
99        //  writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude));
100        //  writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude));
101        //  writer.WriteEndElement(); // trkpt
102        //}
103        //writer.WriteEndElement(); // trkseq
104        //writer.WriteEndElement(); // trk
105
106        writer.WriteEndElement(); // gpx
107      }
108    }
109  }
110}
Note: See TracBrowser for help on using the repository browser.