Esempio n. 1
0
        /// <summary>
        /// Deletes all nodes without neighbors from our final graph.
        /// </summary>
        protected override void CutNodesWithoutNeighbors()
        {
            var nodesToRemove = OsmGraph.AsParallel().Where(node => node.Value.Count == 0).ToList();

            foreach (var node in nodesToRemove)
            {
                OsmGraph.Remove(node.Key);
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Adds Node to final graph (adj list).
 /// </summary>
 /// <param name="id"></param>
 /// <param name="lat">Latitude</param>
 /// <param name="lon">Longitude</param>
 /// <returns></returns>
 public override IGraph AddNodeToGraph(long id, float lat, float lon)
 {
     if (OsmGraph.ContainsKey(id))
     {
         return(this);
     }
     OsmGraph.Add(id, new LinkedList <INode>());
     _nodes.Add(id, new Node(id, lat, lon));
     return(this);
 }
Esempio n. 3
0
        /// <summary>
        /// Adds Edge from given source (srcNodeId) to destinatio (dstNodeId) with given distance.
        /// </summary>
        /// <param name="srcNodeId">Source Node Id</param>
        /// <param name="dstNodeId">Destination Node Id</param>
        /// <param name="distance">Distance between srcNode and dstNode</param>
        protected override void AddDirectedEdge(long srcNodeId, long dstNodeId, double distance)
        {
            var dstNode = _nodes.ContainsKey(dstNodeId) ? _nodes[dstNodeId] : new Node(dstNodeId);

            dstNode.Distance = distance;
            if (!OsmGraph.ContainsKey(srcNodeId))
            {
                OsmGraph.Add(srcNodeId, new LinkedList <INode>());
                OsmGraph[srcNodeId].AddFirst(dstNode);
            }
            else if (OsmGraph[srcNodeId].All(n => n.Id != dstNodeId)) // edge not present
            {
                OsmGraph[srcNodeId].AddFirst(dstNode);
            }
            // else, edge already present, therefore nothing to do anymore
        }
Esempio n. 4
0
 /// <summary>
 /// Returns amount of edges in graph.
 /// </summary>
 /// <returns></returns>
 public override long CountEdges() => OsmGraph.Sum(node => node.Value.Count);