diff --git a/OSM_Regions/Converter.cs b/OSM_Regions/Converter.cs index 43d5158..9356430 100644 --- a/OSM_Regions/Converter.cs +++ b/OSM_Regions/Converter.cs @@ -168,6 +168,8 @@ public class Converter(float regionSize, string? exportFolderPath = null, ILogge int count = 0; DateTime print = DateTime.Now; DateTime start = DateTime.Now; + List wayIds = new(); + List nodeIds = new(); foreach (string path in wayRegionsPaths) { if (DateTime.Now - print > TimeSpan.FromSeconds(2)) @@ -179,8 +181,7 @@ public class Converter(float regionSize, string? exportFolderPath = null, ILogge print = DateTime.Now; } count++; - - List nodeIds = new(); + File.Copy(path, $"{path}.bak", true); StreamReader waysStreamReader = new(path, Encoding.UTF8, false, DefaultReadOptions); StreamWriter waysStreamWriter = new($"{path}.new", Encoding.UTF8, DefaultWriteOptions); @@ -196,6 +197,7 @@ public class Converter(float regionSize, string? exportFolderPath = null, ILogge if (w.Tags.ContainsKey("highway")) { waysStreamWriter.WriteLine(line); + wayIds.Add(w.ID); nodeIds.AddRange(w.NodeIds); hasWritten = true; }else @@ -239,11 +241,56 @@ public class Converter(float regionSize, string? exportFolderPath = null, ILogge File.Move($"{nodesPath}.new", nodesPath, true); } } + + logger?.LogInformation("Cleaning node/way-maps"); + string wayMapFile = Path.Join(ExportFolderPath, WayMapRegionFileName); + string wayMapBak = $"{wayMapFile}.bak"; + File.Copy(wayMapFile, wayMapBak, true); + string newWayMapFile = $"{wayMapFile}.new"; + using (StreamReader wayMapSr = new (wayMapFile, Encoding.ASCII, false, DefaultReadOptions)) + { + using (StreamWriter wayMapSw = new(newWayMapFile, Encoding.ASCII, DefaultWriteOptions)) + { + while (!wayMapSr.EndOfStream) + { + string? line = wayMapSr.ReadLine(); + if(line is null) + continue; + ulong id = ulong.Parse(line.Split('-')[0]); + if(wayIds.Contains(id)) + wayMapSw.WriteLine(line); + } + } + } + File.Move(newWayMapFile, wayMapFile, true); + + string nodeMapFile = Path.Join(ExportFolderPath, NodesMapRegionFileName); + string nodeMapBak = $"{nodeMapFile}.bak"; + File.Copy(nodeMapFile, nodeMapBak, true); + string newNodeMapFile = $"{nodeMapFile}.new"; + using (StreamReader nodeMapSr = new (nodeMapFile, Encoding.ASCII, false, DefaultReadOptions)) + { + using (StreamWriter nodeMapSw = new(newNodeMapFile, Encoding.ASCII, DefaultWriteOptions)) + { + while (!nodeMapSr.EndOfStream) + { + string? line = nodeMapSr.ReadLine(); + if(line is null) + continue; + ulong id = ulong.Parse(line.Split('-')[0]); + if(nodeIds.Contains(id)) + nodeMapSw.WriteLine(line); + } + } + } + File.Move(newNodeMapFile, nodeMapFile, true); logger?.LogInformation("Removing .bak files..."); foreach (string bakFile in Directory.GetFiles(Path.Join(ExportFolderPath, WaysRegionDirectory), "*.bak") .Concat(Directory.GetFiles(Path.Join(ExportFolderPath, NodesRegionDirectory), "*.bak"))) File.Delete(bakFile); + File.Delete(nodeMapBak); + File.Delete(wayMapBak); } private StreamWriter GetOrCreateRegionStreamWriter(long regionId, ref Dictionary srDict, RegionType regionType)