62 lines
2.0 KiB
C#
62 lines
2.0 KiB
C#
using System.ComponentModel;
|
|
using System.Runtime.Serialization;
|
|
using System.Text.Json.Serialization;
|
|
|
|
namespace OSMDatastructure.Graph;
|
|
|
|
[Serializable]
|
|
public class OsmNode
|
|
{
|
|
public ulong nodeId { get; }
|
|
public HashSet<OsmEdge> edges { get; set; }
|
|
public Coordinates coordinates { get; }
|
|
|
|
[JsonIgnore][NonSerialized]public OsmNode? previousPathNode = null;
|
|
[JsonInclude][NonSerialized]public double currentPathWeight = double.MaxValue;
|
|
[JsonInclude][NonSerialized]public double currentPathLength = double.MaxValue;
|
|
[JsonIgnore][NonSerialized]public double directDistanceToGoal = double.MaxValue;
|
|
|
|
[OnDeserialized]
|
|
internal void SetDefaultValues(StreamingContext context)
|
|
{
|
|
currentPathWeight = double.MaxValue;
|
|
currentPathLength = double.MaxValue;
|
|
directDistanceToGoal = double.MaxValue;
|
|
}
|
|
|
|
public OsmNode(ulong nodeId, float lat, float lon)
|
|
{
|
|
this.nodeId = nodeId;
|
|
this.edges = new();
|
|
this.coordinates = new Coordinates(lat, lon);
|
|
}
|
|
|
|
[JsonConstructor]
|
|
public OsmNode(ulong nodeId, Coordinates coordinates)
|
|
{
|
|
this.nodeId = nodeId;
|
|
this.edges = new();
|
|
this.coordinates = coordinates;
|
|
}
|
|
|
|
public OsmEdge? GetEdgeToNode(OsmNode n)
|
|
{
|
|
HashSet<OsmEdge> e = edges.Where(edge => edge.neighborId == n.nodeId).ToHashSet();
|
|
if (e.Count > 0)
|
|
return e.First();
|
|
else return null;
|
|
}
|
|
|
|
public override bool Equals(object? obj)
|
|
{
|
|
return obj != null && obj.GetType() == this.GetType() && ((OsmNode)obj).nodeId == this.nodeId;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
if(previousPathNode is not null)
|
|
return $"{nodeId} {coordinates} ec:{edges.Count} d:{directDistanceToGoal} w:{currentPathWeight} l:{currentPathLength} p:{previousPathNode.nodeId}";
|
|
return
|
|
$"{nodeId} {coordinates} ec:{edges.Count} d:{directDistanceToGoal} w:{currentPathWeight} l:{currentPathLength} null";
|
|
}
|
|
} |