using System; using System.Diagnostics; using System.IO; using System.Xml; using HeuristicLab.Algorithms.GraphRouting; using HeuristicLab.Problems.RoutePlanning.Graph; using HeuristicLab.Problems.RoutePlanning.Osm; using HeuristicLab.Problems.RoutePlanning.Osm.Data; namespace HeuristicLab.Problems.RoutePlanning.Test { class Program { static void Main(string[] args) { // For testing openstreetmap data is used // http://www.openstreetmap.org // Map data © OpenStreetMap contributors, CC BY-SA string file1 = @"..\..\OsmTestFiles\test.osm"; string file2 = @"..\..\OsmTestFiles\testNode1.osm"; string file3 = @"..\..\OsmTestFiles\testWay1.osm"; string file4 = @"..\..\OsmTestFiles\testRelation1.osm"; string file5 = @"..\..\OsmTestFiles\test_mid.osm"; string file6 = @"C:\dev\osmfiles\oberosterreich.highway.osm"; //TestD(file5, 529102170, 1001363194, true, false); // inz - inz //Test(file5, 529102170, 1001363194, true, false); // inz - inz //Test(file6, 529102170, 1001363194, true, false); // inz - inz IDataSource ds = TestLoad(file6); Graph.Graph graph = new Graph.Graph(ds); TestRouter(new AStarAlgorithm(graph), 529102170, 31372732, false); // inz - hgb TestRouter(new AStarAlgorithmV2(graph), 529102170, 31372732, false); // inz - hgb //TestLoadAndRouter(file6, typeof(DijkstraAlgorithm), 529102170, 31372732, false, false); // inz - hgb //TestLoadAndRouter(file6, typeof(AStarAlgorithm), 529102170, 31372732, false, false); // inz - hgb //TestLoadAndRouter(file6, typeof(AStarAlgorithmV2), 529102170, 31372732, false, false); // inz - hgb System.Console.Read(); } private static long[] TestRouter(IRouter router, long sourceNodeId, long targetNodeId, bool showResult) { Console.WriteLine("Test Router BEGIN ---------------------------------"); Console.WriteLine("Type: " + router.GetType()); Console.Write("Calculate route ... "); var sw = Stopwatch.StartNew(); long[] result = router.Calculate(sourceNodeId, targetNodeId); sw.Stop(); Console.WriteLine("done."); Console.WriteLine("Execution Time: {0}", sw.Elapsed); Console.WriteLine(); if (showResult) { Console.WriteLine("Result: "); foreach (long i in result) System.Console.Write(i + "; "); Console.WriteLine(); Console.WriteLine(); } Console.WriteLine("==================================================="); Console.WriteLine(); return result; } private static IDataSource TestLoad(string filepath) { FileInfo file = new FileInfo(filepath); Console.WriteLine("Test Load Data BEGIN ------------------------------"); Console.WriteLine("File name: {0}", file.Name); Console.WriteLine(); Console.Write("Loading data ... "); var sw = Stopwatch.StartNew(); XmlDataSource xmlDs = new XmlDataSource(filepath); sw.Stop(); Console.WriteLine("done."); Console.WriteLine("Time: {0}", sw.Elapsed); Console.WriteLine(); Console.WriteLine("==================================================="); Console.WriteLine(); return xmlDs; } private static void TestLoadAndRouter(string filepath, Type routerType, long sourceNodeId, long targetNodeId, bool showResult, bool writeResultFile) { FileInfo file = new FileInfo(filepath); Console.WriteLine("Test Load and Route BEGIN -------------------------"); Console.WriteLine("File name: {0}", file.Name); Console.WriteLine(); Console.Write("Loading data ... "); var sw = Stopwatch.StartNew(); XmlDataSource xmlDs = new XmlDataSource(filepath); sw.Stop(); Console.WriteLine("done."); Console.WriteLine("Loading Time: {0}", sw.Elapsed); Console.WriteLine(); Graph.Graph graph = new Graph.Graph(xmlDs); IRouter router = (IRouter)Activator.CreateInstance(routerType, graph); Console.Write("Calculate route ... "); sw = Stopwatch.StartNew(); long[] result = router.Calculate(sourceNodeId, targetNodeId); sw.Stop(); Console.WriteLine("done."); Console.WriteLine("Execution Time: {0}", sw.Elapsed); Console.WriteLine(); if (showResult) { Console.WriteLine("Result: "); foreach (long i in result) System.Console.Write(i + "; "); Console.WriteLine(); Console.WriteLine(); } if (writeResultFile) { string dt = DateTime.Now.ToString("yyyyMMddhhmmss_"); string fn = Path.GetFileNameWithoutExtension(file.Name); string resultFile = dt + fn + "_" + sourceNodeId + "-" + targetNodeId + ".gpx"; Console.WriteLine("Result file: {0}", resultFile); WriteGPXFile(graph, result, resultFile); } Console.WriteLine("==================================================="); Console.WriteLine(); } private static void WriteGPXFile(Graph.Graph graph, long[] route, string file) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; settings.IndentChars = (" "); using (XmlWriter writer = XmlWriter.Create(file, settings)) { writer.WriteStartElement("gpx", "http://www.topografix.com/GPX/1/0"); writer.WriteAttributeString("version", "1.1"); writer.WriteAttributeString("creator", "cloudia"); foreach (long nodeId in route) { Vertex node = graph.GetVertex(nodeId); writer.WriteStartElement("wpt"); writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude)); writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude)); writer.WriteEndElement(); // wpt } //writer.WriteStartElement("rte"); //foreach (long nodeId in route) { // Vertex node = graph.GetVertex(nodeId); // writer.WriteStartElement("rtept"); // writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude)); // writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude)); // writer.WriteEndElement(); // rtept //} //writer.WriteEndElement(); // rte //writer.WriteStartElement("trk"); //writer.WriteElementString("name", "RoutePath"); ////writer.WriteEndElement(); // name //writer.WriteStartElement("trkseq"); //foreach (long nodeId in route) { // Vertex node = graph.GetVertex(nodeId); // writer.WriteStartElement("trkpt"); // writer.WriteAttributeString("lat", XmlConvert.ToString(node.Node.Latitude)); // writer.WriteAttributeString("lon", XmlConvert.ToString(node.Node.Longitude)); // writer.WriteEndElement(); // trkpt //} //writer.WriteEndElement(); // trkseq //writer.WriteEndElement(); // trk writer.WriteEndElement(); // gpx } } } }