diff --git a/API/Program.cs b/API/Program.cs index 0437483..487db63 100644 --- a/API/Program.cs +++ b/API/Program.cs @@ -1,3 +1,4 @@ +using System.Text.Json.Serialization; using OSMDatastructure.Graph; using OSMImporter; using Pathfinding; @@ -17,9 +18,10 @@ var app = builder.Build(); app.MapGet("/getRoute", (float latStart, float lonStart, float latEnd, float lonEnd) => { - List path = Pathfinder.CustomAStar("D:/stuttgart-regbez-latest", new Coordinates(latStart, lonStart), new Coordinates(latEnd, lonEnd), + ValueTuple> result = Pathfinder.CustomAStar("D:/stuttgart-regbez-latest", new Coordinates(latStart, lonStart), new Coordinates(latEnd, lonEnd), Tag.SpeedType.car); - return path; + PathResult pathResult = new PathResult(result.Item1, result.Item2); + return pathResult; } ); @@ -42,4 +44,20 @@ app.UseAuthorization(); app.MapControllers(); -app.Run(); \ No newline at end of file +app.Run(); + +internal class PathResult +{ + [JsonInclude]public TimeSpan calcTime; + [JsonInclude] public double pathWeight; + [JsonInclude] public double pathTravelDistance; + [JsonInclude]public List pathNodes; + + public PathResult(TimeSpan calcTime, List pathNodes) + { + this.calcTime = calcTime; + this.pathNodes = pathNodes; + this.pathWeight = pathNodes.Last().currentPathWeight; + this.pathTravelDistance = pathNodes.Last().currentPathLength; + } +} \ No newline at end of file diff --git a/Pathfinding/Pathfinder.cs b/Pathfinding/Pathfinder.cs index ea08b57..ff1c545 100644 --- a/Pathfinding/Pathfinder.cs +++ b/Pathfinding/Pathfinder.cs @@ -6,13 +6,18 @@ namespace Pathfinding; public static class Pathfinder { - public static List CustomAStar(string workingDir, Coordinates start, Coordinates goal, Tag.SpeedType vehicle) + public static ValueTuple> CustomAStar(string workingDir, Coordinates start, Coordinates goal, Tag.SpeedType vehicle) { + DateTime startTime = DateTime.Now; + TimeSpan calcTime; RegionManager regionManager = new (workingDir); OsmNode? startNode = ClosestNodeToCoordinates(start, vehicle, ref regionManager); OsmNode? goalNode = ClosestNodeToCoordinates(goal, vehicle, ref regionManager); if (startNode == null || goalNode == null) - return new List(); + { + calcTime = DateTime.Now - startTime; + return new ValueTuple>(calcTime, new List()); + } PriorityQueue toVisit = new(); toVisit.Enqueue(startNode, 0); @@ -24,7 +29,7 @@ public static class Pathfinder while (toVisit.Count > 0) { OsmNode closestNodeToGoal = toVisit.Dequeue(); - Console.WriteLine($"{toVisit.Count:000} {closestNodeToGoal.directDistanceToGoal:#.00} current:{closestNodeToGoal}"); + //Console.WriteLine($"{toVisit.Count:000} {closestNodeToGoal.directDistanceToGoal:#.00} current:{closestNodeToGoal}"); foreach (OsmEdge edge in closestNodeToGoal.edges) { @@ -62,8 +67,9 @@ public static class Pathfinder currentNode = currentNode.previousPathNode; } path.Reverse(); - - return path; + + calcTime = DateTime.Now - startTime; + return new ValueTuple>(calcTime, path); } public static OsmNode? ClosestNodeToCoordinates(Coordinates coordinates, Tag.SpeedType vehicle, ref RegionManager regionManager)