[8293] | 1 |
|
---|
[8314] | 2 | using System;
|
---|
[8316] | 3 | using System.Diagnostics;
|
---|
| 4 | using System.IO;
|
---|
[8315] | 5 | using System.Xml;
|
---|
[8314] | 6 | using HeuristicLab.Algorithms.GraphRouting;
|
---|
[8315] | 7 | using HeuristicLab.Problems.RoutePlanning.Graph;
|
---|
| 8 | using HeuristicLab.Problems.RoutePlanning.Osm;
|
---|
[8293] | 9 | using HeuristicLab.Problems.RoutePlanning.Osm.Data;
|
---|
| 10 | namespace HeuristicLab.Problems.RoutePlanning.Test {
|
---|
| 11 | class Program {
|
---|
| 12 | static void Main(string[] args) {
|
---|
[8316] | 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";
|
---|
[8314] | 19 |
|
---|
[8316] | 20 | Test(file5, 529102170, 1001363194, true, false);
|
---|
| 21 | //Test(file6, 529102170, 1001363194, true, false);
|
---|
| 22 | //Test(file6, 529102170, 31372732, false, true); // inz - hgb
|
---|
[8314] | 23 | System.Console.Read();
|
---|
| 24 | }
|
---|
| 25 |
|
---|
[8316] | 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();
|
---|
[8314] | 31 | Console.Write("Loading data ... ");
|
---|
[8316] | 32 | var sw = Stopwatch.StartNew();
|
---|
[8293] | 33 | XmlDataSource xmlDs = new XmlDataSource(filepath);
|
---|
[8316] | 34 | sw.Stop();
|
---|
[8314] | 35 | Console.WriteLine("done.");
|
---|
[8316] | 36 | Console.WriteLine("Loading Time: {0}", sw.Elapsed);
|
---|
| 37 | Console.WriteLine();
|
---|
[8314] | 38 | Graph.Graph graph = new Graph.Graph(xmlDs);
|
---|
[8350] | 39 | //IRouter router = new DijkstraAlgorithm(graph);
|
---|
| 40 | IRouter router = new AStarAlgorithm(graph);
|
---|
[8314] | 41 | Console.Write("Calculate route ... ");
|
---|
[8316] | 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);
|
---|
[8314] | 47 | Console.WriteLine();
|
---|
[8316] | 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();
|
---|
[8293] | 63 | }
|
---|
[8315] | 64 |
|
---|
[8316] | 65 | private static void WriteGPXFile(Graph.Graph graph, long[] route, string file) {
|
---|
[8315] | 66 | XmlWriterSettings settings = new XmlWriterSettings();
|
---|
| 67 | settings.Indent = true;
|
---|
| 68 | settings.IndentChars = (" ");
|
---|
| 69 |
|
---|
[8316] | 70 | using (XmlWriter writer = XmlWriter.Create(file, settings)) {
|
---|
[8315] | 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 | }
|
---|
[8293] | 110 | }
|
---|
| 111 | }
|
---|