Removed unessecary duplication of graph

This commit is contained in:
C9Glax 2022-11-03 18:21:13 +01:00
parent 485f04e6a2
commit 4930423cb5

View File

@ -99,7 +99,6 @@ namespace OpenStreetMap_Importer
private static Dictionary<ulong, Node> CreateGraph(Stream mapData, Dictionary<ulong, ushort> occuranceCount, bool onlyJunctions, Logger? logger = null) private static Dictionary<ulong, Node> CreateGraph(Stream mapData, Dictionary<ulong, ushort> occuranceCount, bool onlyJunctions, Logger? logger = null)
{ {
Dictionary<ulong, Node> _tempAll = new();
Dictionary<ulong, Node> _graph = new(); Dictionary<ulong, Node> _graph = new();
Way _currentWay; Way _currentWay;
Node _n1, _n2, _currentNode; Node _n1, _n2, _currentNode;
@ -118,7 +117,7 @@ namespace OpenStreetMap_Importer
{ {
float lat = Convert.ToSingle(_reader.GetAttribute("lat").Replace('.', ',')); float lat = Convert.ToSingle(_reader.GetAttribute("lat").Replace('.', ','));
float lon = Convert.ToSingle(_reader.GetAttribute("lon").Replace('.', ',')); float lon = Convert.ToSingle(_reader.GetAttribute("lon").Replace('.', ','));
_tempAll.Add(id, new Node(lat, lon)); _graph.Add(id, new Node(lat, lon));
logger?.Log(LogLevel.VERBOSE, "NODE {0} {1} {2} {3}", id, lat, lon, occuranceCount[id]); logger?.Log(LogLevel.VERBOSE, "NODE {0} {1} {2} {3}", id, lat, lon, occuranceCount[id]);
} }
} }
@ -157,8 +156,8 @@ namespace OpenStreetMap_Importer
{ {
for (int _nodeIdIndex = 0; _nodeIdIndex < _currentWay.nodeIds.Count - 1; _nodeIdIndex++) for (int _nodeIdIndex = 0; _nodeIdIndex < _currentWay.nodeIds.Count - 1; _nodeIdIndex++)
{ {
_n1 = _tempAll[_currentWay.nodeIds[_nodeIdIndex]]; _n1 = _graph[_currentWay.nodeIds[_nodeIdIndex]];
_n2 = _tempAll[_currentWay.nodeIds[_nodeIdIndex + 1]]; _n2 = _graph[_currentWay.nodeIds[_nodeIdIndex + 1]];
_weight = Utils.DistanceBetweenNodes(_n1, _n2) * 1000 / _currentWay.GetMaxSpeed(); _weight = Utils.DistanceBetweenNodes(_n1, _n2) * 1000 / _currentWay.GetMaxSpeed();
if (!_currentWay.IsOneWay()) if (!_currentWay.IsOneWay())
{ {
@ -175,23 +174,13 @@ namespace OpenStreetMap_Importer
} }
logger?.Log(LogLevel.VERBOSE, "Add Edge: {0} & {1} Weight: {2}", _currentWay.nodeIds[_nodeIdIndex], _currentWay.nodeIds[_nodeIdIndex + 1], _weight); logger?.Log(LogLevel.VERBOSE, "Add Edge: {0} & {1} Weight: {2}", _currentWay.nodeIds[_nodeIdIndex], _currentWay.nodeIds[_nodeIdIndex + 1], _weight);
} }
_graph = _tempAll;
} }
else else
{
if (!_tempAll.TryGetValue(_currentWay.nodeIds[0], out _n1))
{ {
_n1 = _graph[_currentWay.nodeIds[0]]; _n1 = _graph[_currentWay.nodeIds[0]];
}
else
{
_graph.TryAdd(_currentWay.nodeIds[0], _n1);
_tempAll.Remove(_currentWay.nodeIds[0]);
}
_currentNode = _n1; _currentNode = _n1;
for(int _nodeIdIndex = 0; _nodeIdIndex < _currentWay.nodeIds.Count - 1; _nodeIdIndex++) for(int _nodeIdIndex = 0; _nodeIdIndex < _currentWay.nodeIds.Count - 1; _nodeIdIndex++)
{ {
if (!_tempAll.TryGetValue(_currentWay.nodeIds[_nodeIdIndex + 1], out _n2))
_n2 = _graph[_currentWay.nodeIds[_nodeIdIndex + 1]]; _n2 = _graph[_currentWay.nodeIds[_nodeIdIndex + 1]];
_distance += Utils.DistanceBetweenNodes(_currentNode, _n2); _distance += Utils.DistanceBetweenNodes(_currentNode, _n2);
if (occuranceCount[_currentWay.nodeIds[_nodeIdIndex]] > 1 || _nodeIdIndex == _currentWay.nodeIds.Count - 2) //junction found if (occuranceCount[_currentWay.nodeIds[_nodeIdIndex]] > 1 || _nodeIdIndex == _currentWay.nodeIds.Count - 2) //junction found
@ -216,7 +205,7 @@ namespace OpenStreetMap_Importer
} }
else else
{ {
_tempAll.Remove(_currentWay.nodeIds[_nodeIdIndex]); _graph.Remove(_currentWay.nodeIds[_nodeIdIndex]); //Not a junction
} }
_currentNode = _n2; _currentNode = _n2;
} }