namespace OSMDatastructure.Graph; [Serializable] public class OsmNode { public ulong nodeId { get; } public HashSet edges { get; } public Coordinates coordinates { get; } [NonSerialized]public OsmNode? previousPathNode = null; [NonSerialized]public double currentPathWeight = double.MaxValue; [NonSerialized]public double currentPathLength = double.MaxValue; [NonSerialized]public double directDistanceToGoal = double.MaxValue; public OsmNode(ulong nodeId, float lat, float lon) { this.nodeId = nodeId; this.edges = new(); this.coordinates = new Coordinates(lat, lon); } public OsmNode(ulong nodeId, Coordinates coordinates) { this.nodeId = nodeId; this.edges = new(); this.coordinates = coordinates; } public OsmEdge? GetEdgeToNode(OsmNode n) { foreach (OsmEdge e in this.edges) if (e.neighborId == n.nodeId) return e; return null; } public override bool Equals(object? obj) { return obj != null && obj.GetType() == this.GetType() && ((OsmNode)obj).nodeId == this.nodeId; } public override int GetHashCode() { return HashCode.Combine(coordinates); } public override string ToString() { if(this.previousPathNode != null) return string.Format( "NODE {0} Edges-Count: {1} previousPathNode: {2} currentPathWeight: {3} currentPathLength: {4} directDistanceToGoal: {5}", this.coordinates.ToString(), this.edges.Count, this.previousPathNode.coordinates.ToString(), this.currentPathWeight, this.currentPathLength, this.directDistanceToGoal); else return string.Format( "NODE {0} Edges-Count: {1} previousPathNode: NO PREVIOUS NODE currentPathWeight: {2} currentPathLength: {3} directDistanceToGoal: {4}", this.coordinates.ToString(), this.edges.Count, this.currentPathWeight, this.currentPathLength, this.directDistanceToGoal); } }