From 9ef1d4a978f0b8541b3fa91d11db5aee4986125c Mon Sep 17 00:00:00 2001 From: glax Date: Sat, 1 Apr 2023 00:52:13 +0200 Subject: [PATCH] Readbility through Methods --- Server/RegionConverter.cs | 91 +++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 52 deletions(-) diff --git a/Server/RegionConverter.cs b/Server/RegionConverter.cs index e42766f..8e08d5a 100644 --- a/Server/RegionConverter.cs +++ b/Server/RegionConverter.cs @@ -19,7 +19,7 @@ public class RegionConverter public const string NodesFileName = "region.nodes"; public const string WaysFileName = "region.ways"; - public const string tagsFileName = "waytags"; + public const string tagsFileName = "region.tags"; public static void ConvertXMLToRegions(string filePath, string outputPath) { @@ -107,8 +107,7 @@ public class RegionConverter xmlReader.Close(); return nodeRegions; } - - //TODO write all tags in region to single file instead of separate wayfiles + private static void ImportWays(XmlReader xmlReader, Dictionary nodeRegions, string outputPath) { BinaryFormatter bFormatter = new BinaryFormatter(); @@ -117,8 +116,7 @@ public class RegionConverter List currentNodeIds = new(); Dictionary currentTags = new(); Dictionary regionWaysFileStreams = new(); - string wayFileStreamPath = ""; - FileStream wayFileStream = new FileStream(Path.GetTempFileName(), FileMode.Create); + Dictionary regionTagsFileStreams = new(); while (xmlReader.ReadToFollowing("way")) { ulong wayId = Convert.ToUInt64(xmlReader.GetAttribute("id")!); @@ -158,71 +156,60 @@ public class RegionConverter if (currentTags.ContainsKey(Tag.TagType.forward) && !(bool)currentTags[Tag.TagType.forward]) { OsmWay n21e = new OsmWay(currentWayId, node2Id, node1Id, nodeRegions[node2Id]); - if (!regionWaysFileStreams.ContainsKey(nodeRegions[node2Id])) - { - string waysRegionPath = Path.Combine(outputPath, nodeRegions[node2Id].ToString(), WaysFileName); - regionWaysFileStreams.Add(nodeRegions[node2Id], new FileStream(waysRegionPath, FileMode.OpenOrCreate)); - } -#pragma warning disable SYSLIB0011 - bFormatter.Serialize(regionWaysFileStreams[nodeRegions[node2Id]], n21e); - - wayFileStreamPath = Path.Combine(outputPath, nodeRegions[node2Id].ToString(), $"{wayId}.{tagsFileName}"); - wayFileStream = new FileStream(wayFileStreamPath, FileMode.OpenOrCreate); - bFormatter.Serialize(wayFileStream, currentTags); - wayFileStream.Dispose(); + WriteWay(ref regionWaysFileStreams, nodeRegions[node2Id], n21e, outputPath); + WriteTag(ref regionTagsFileStreams, nodeRegions[node2Id], currentTags, outputPath); } else { OsmWay n12e = new OsmWay(currentWayId, node1Id, node2Id, nodeRegions[node2Id]); - if (!regionWaysFileStreams.ContainsKey(nodeRegions[node1Id])) - { - string waysRegionPath = Path.Combine(outputPath, nodeRegions[node1Id].ToString(), WaysFileName); - regionWaysFileStreams.Add(nodeRegions[node1Id], new FileStream(waysRegionPath, FileMode.OpenOrCreate)); - } - bFormatter.Serialize(regionWaysFileStreams[nodeRegions[node1Id]], n12e); - - wayFileStreamPath = Path.Combine(outputPath, nodeRegions[node1Id].ToString(), $"{wayId}.{tagsFileName}"); - wayFileStream = new FileStream(wayFileStreamPath, FileMode.OpenOrCreate); - bFormatter.Serialize(wayFileStream, currentTags); - wayFileStream.Dispose(); + WriteWay(ref regionWaysFileStreams, nodeRegions[node1Id], n12e, outputPath); + WriteTag(ref regionTagsFileStreams, nodeRegions[node1Id], currentTags, outputPath); } } else if(nodeRegions.ContainsKey(node1Id) && nodeRegions.ContainsKey(node2Id)) { OsmWay n12e = new OsmWay(currentWayId, node1Id, node2Id, nodeRegions[node2Id]); - if (!regionWaysFileStreams.ContainsKey(nodeRegions[node1Id])) - { - string waysRegionPath = Path.Combine(outputPath, nodeRegions[node1Id].ToString(), WaysFileName); - regionWaysFileStreams.Add(nodeRegions[node1Id], new FileStream(waysRegionPath, FileMode.OpenOrCreate)); - } - bFormatter.Serialize(regionWaysFileStreams[nodeRegions[node1Id]], n12e); - - wayFileStreamPath = Path.Combine(outputPath, nodeRegions[node1Id].ToString(), $"{wayId}.{tagsFileName}"); - wayFileStream = new FileStream(wayFileStreamPath, FileMode.OpenOrCreate); - bFormatter.Serialize(wayFileStream, currentTags); - wayFileStream.Dispose(); + WriteWay(ref regionWaysFileStreams, nodeRegions[node1Id], n12e, outputPath); + WriteTag(ref regionTagsFileStreams, nodeRegions[node1Id], currentTags, outputPath); OsmWay n21e = new OsmWay(currentWayId, node2Id, node1Id, nodeRegions[node2Id]); - if (!regionWaysFileStreams.ContainsKey(nodeRegions[node2Id])) - { - string waysRegionPath = Path.Combine(outputPath, nodeRegions[node2Id].ToString(), WaysFileName); - regionWaysFileStreams.Add(nodeRegions[node2Id], new FileStream(waysRegionPath, FileMode.OpenOrCreate)); - } - bFormatter.Serialize(regionWaysFileStreams[nodeRegions[node1Id]], n21e); - - wayFileStreamPath = Path.Combine(outputPath, nodeRegions[node2Id].ToString(), $"{wayId}.{tagsFileName}"); - wayFileStream = new FileStream(wayFileStreamPath, FileMode.OpenOrCreate); - bFormatter.Serialize(wayFileStream, currentTags); - wayFileStream.Dispose(); -#pragma warning restore SYSLIB0011 + WriteWay(ref regionWaysFileStreams, nodeRegions[node2Id], n21e, outputPath); + WriteTag(ref regionTagsFileStreams, nodeRegions[node2Id], currentTags, outputPath); } } } } xmlReader.Close(); foreach (FileStream f in regionWaysFileStreams.Values) - { f.Dispose(); + foreach(FileStream f in regionTagsFileStreams.Values) + f.Dispose(); + } + + private static void WriteWay(ref Dictionary regionWaysFileStreams, ulong regionHash, OsmWay way, string outputPath) + { + BinaryFormatter bFormatter = new BinaryFormatter(); + if (!regionWaysFileStreams.ContainsKey(regionHash)) + { + string waysRegionPath = Path.Combine(outputPath, regionHash.ToString(), WaysFileName); + regionWaysFileStreams.Add(regionHash, new FileStream(waysRegionPath, FileMode.OpenOrCreate)); } +#pragma warning disable SYSLIB0011 + bFormatter.Serialize(regionWaysFileStreams[regionHash], way); +#pragma warning restore SYSLIB0011 + + } + + private static void WriteTag(ref Dictionary regionTagsFileStreams, ulong regionHash, Dictionary currentTags, string outputPath) + { + BinaryFormatter bFormatter = new BinaryFormatter(); + if (!regionTagsFileStreams.ContainsKey(regionHash)) + { + string tagsRegionPath = Path.Combine(outputPath, regionHash.ToString(), tagsFileName); + regionTagsFileStreams.Add(regionHash, new FileStream(tagsRegionPath, FileMode.OpenOrCreate)); + } +#pragma warning disable SYSLIB0011 + bFormatter.Serialize(regionTagsFileStreams[regionHash], currentTags); +#pragma warning restore SYSLIB0011 } } \ No newline at end of file