From 6e836db79b8f487c3f9b4b5fa79facecf3b01d53 Mon Sep 17 00:00:00 2001 From: glax Date: Sun, 9 Apr 2023 19:22:34 +0200 Subject: [PATCH] changed speeds and return type to byte --- OSMDatastructure/Tag.cs | 17 +++++++++-------- Pathfinding/Pathfinder.cs | 6 ++---- Pathfinding/RegionManager.cs | 25 +++++++++---------------- 3 files changed, 20 insertions(+), 28 deletions(-) diff --git a/OSMDatastructure/Tag.cs b/OSMDatastructure/Tag.cs index ba912d8..22cc6b1 100644 --- a/OSMDatastructure/Tag.cs +++ b/OSMDatastructure/Tag.cs @@ -98,18 +98,19 @@ public class Tag public static readonly Dictionary defaultSpeedCar = new() { { WayType.NONE, 0 }, - { WayType.motorway, 110 }, - { WayType.trunk, 100 }, + { WayType.motorway, 130 }, + { WayType.motorroad, 90 }, + { WayType.trunk, 85 }, { WayType.primary, 80 }, { WayType.secondary, 80 }, { WayType.tertiary, 70 }, - { WayType.unclassified, 20 }, + { WayType.unclassified, 15 }, { WayType.residential, 10 }, - { WayType.motorway_link, 50 }, + { WayType.motorway_link, 60 }, { WayType.trunk_link, 50 }, - { WayType.primary_link, 30 }, - { WayType.secondary_link, 25 }, - { WayType.tertiary_link, 25 }, + { WayType.primary_link, 50 }, + { WayType.secondary_link, 50 }, + { WayType.tertiary_link, 50 }, { WayType.living_street, 5 }, { WayType.service, 1 }, { WayType.pedestrian, 0 }, @@ -160,7 +161,7 @@ public class Tag { WayType.construction, 0 } }; // ReSharper disable InconsistentNaming - public enum WayType : byte { NONE, motorway, trunk, primary, secondary, tertiary, unclassified, residential, motorway_link, trunk_link, primary_link, secondary_link, tertiary_link, living_street, service, pedestrian, track, bus_guideway, escape, raceway, road, busway, footway, bridleway, steps, corridor, path, cycleway, construction } + public enum WayType : byte { NONE, motorway, motorroad, trunk, primary, secondary, tertiary, unclassified, residential, motorway_link, trunk_link, primary_link, secondary_link, tertiary_link, living_street, service, pedestrian, track, bus_guideway, escape, raceway, road, busway, footway, bridleway, steps, corridor, path, cycleway, construction } // ReSharper restore InconsistentNaming public enum SpeedType { pedestrian, car, any } diff --git a/Pathfinding/Pathfinder.cs b/Pathfinding/Pathfinder.cs index 9f3ec2a..26e3662 100644 --- a/Pathfinding/Pathfinder.cs +++ b/Pathfinding/Pathfinder.cs @@ -25,10 +25,8 @@ public static partial class Pathfinder if (node2 is null) return double.MaxValue; double distance = Utils.DistanceBetween(node1, node2); - double speed = regionManager.GetSpeedForEdge(node1, edge.wayId, vehicle); - if (speed is 0) - return double.MaxValue; - return distance / speed; + byte speed = regionManager.GetSpeedForEdge(node1, edge.wayId, vehicle); + return speed is 0 ? double.MaxValue : distance / speed; } private static List GetRouteFromCalc(OsmNode goalNode, RegionManager regionManager) diff --git a/Pathfinding/RegionManager.cs b/Pathfinding/RegionManager.cs index a42692d..b318958 100644 --- a/Pathfinding/RegionManager.cs +++ b/Pathfinding/RegionManager.cs @@ -76,10 +76,8 @@ namespace Pathfinding { if (type == Tag.SpeedType.any) return true; - double speed = GetSpeedForEdge(node1, edge.wayId, type); - if (speed != 0) - return true; - return false; + byte speed = GetSpeedForEdge(node1, edge.wayId, type); + return (speed is not 0); } public OsmNode? ClosestNodeToCoordinates(Coordinates coordinates, Tag.SpeedType vehicle) @@ -97,7 +95,7 @@ namespace Pathfinding hasConnectionUsingVehicle = false; foreach (OsmEdge edge in node.edges) { - double speed = GetSpeedForEdge(node, edge.wayId, vehicle); + byte speed = GetSpeedForEdge(node, edge.wayId, vehicle); if (speed != 0) hasConnectionUsingVehicle = true; } @@ -114,25 +112,20 @@ namespace Pathfinding return closest; } - public double GetSpeedForEdge(OsmNode node1, ulong wayId, Tag.SpeedType vehicle) + public byte GetSpeedForEdge(OsmNode node1, ulong wayId, Tag.SpeedType vehicle) { TagManager tags = GetRegion(node1.coordinates)!.tagManager; Tag.WayType wayType = (Tag.WayType)tags.GetTag(wayId, Tag.TagType.highway)!; + byte speed = 0; switch (vehicle) { case Tag.SpeedType.pedestrian: - byte speed = Tag.defaultSpeedPedestrian[wayType]; - if (speed is not 0) - return speed; - return 0; + speed = Tag.defaultSpeedPedestrian[wayType]; + return speed is not 0 ? speed : (byte)0; case Tag.SpeedType.car: byte? maxSpeed = (byte?)tags.GetTag(wayId, Tag.TagType.maxspeed); - if (maxSpeed is not null) - return (double)maxSpeed; - maxSpeed = Tag.defaultSpeedCar[wayType]; - if(maxSpeed is not 0) - return (byte)maxSpeed; - return 0; + speed = Tag.defaultSpeedCar[wayType]; + return maxSpeed < speed ? (byte)maxSpeed : speed; case Tag.SpeedType.any: return 1; default: