diff --git a/Graph/Node.cs b/Graph/Node.cs index dd8084f..090ee19 100644 --- a/Graph/Node.cs +++ b/Graph/Node.cs @@ -1,8 +1,8 @@ namespace Graph; -public class Node(float lat, float lon, Dictionary? neighbors = null) +public class Node(float lat, float lon, Dictionary>? neighbors = null) { - public readonly Dictionary Neighbors = neighbors??new(); //nodeId, wayId + public readonly Dictionary> Neighbors = neighbors??new(); //nodeId, wayId, forward public readonly float Lat = lat, Lon = lon; public double DistanceTo(Node n2) => Utils.NodeUtils.DistanceBetween(this, n2); diff --git a/OSM_Graph/Node.cs b/OSM_Graph/Node.cs index 8a7da77..994ac48 100644 --- a/OSM_Graph/Node.cs +++ b/OSM_Graph/Node.cs @@ -3,13 +3,13 @@ using System.Runtime.Serialization; namespace OSM_Graph; -public class Node(ulong id, float lat, float lon, Dictionary? neighbors = null) : Graph.Node(lat, lon, neighbors), IOSMSerializable +public class Node(ulong id, float lat, float lon, Dictionary>? neighbors = null) : Graph.Node(lat, lon, neighbors), IOSMSerializable { public readonly ulong ID = id; public string Serialize() { - return $"{this.ID}#{this.Lat.ToString(CultureInfo.InvariantCulture)}#{this.Lon.ToString(CultureInfo.InvariantCulture)}#{string.Join(',', this.Neighbors.Select(n => $"{n.Key}-{n.Value}"))}"; + return $"{this.ID}#{this.Lat.ToString(CultureInfo.InvariantCulture)}#{this.Lon.ToString(CultureInfo.InvariantCulture)}#{string.Join(',', this.Neighbors.Select(n => $"{n.Key}-{n.Value.Key}-{n.Value.Value}"))}"; } public static Node Deserialize(string serialized) @@ -22,9 +22,11 @@ public class Node(ulong id, float lat, float lon, Dictionary? neig ulong id = ulong.Parse(parts[0]); float lat = float.Parse(parts[1], NumberStyles.Float, CultureInfo.InvariantCulture); float lon = float.Parse(parts[2], NumberStyles.Float, CultureInfo.InvariantCulture); - Dictionary neighbors = parts[3].Length > 3 - ? parts[3].Split(',').ToDictionary(str => ulong.Parse(str.Split('-')[0]), str => ulong.Parse(str.Split('-')[1])) - : new(); + Dictionary> neighbors = parts[3].Length > 3 + ? parts[3].Split(',').ToDictionary(str => ulong.Parse(str.Split('-')[0]), + str => new KeyValuePair(ulong.Parse(str.Split('-')[1]), + bool.Parse(str.Split('-')[2]))) + : new(); return new Node(id, lat, lon, neighbors); }