internal void LoadAll(string fileName) { string filePath = Path.Combine(OSMPaths.GetLocalCacheRoot(), fileName); using (var reader = File.Open(filePath, FileMode.Open)) { using (var br = new BinaryReader(reader)) { int edgeInfoCount = br.ReadInt32(); for (int j = 0; j < edgeInfoCount; j++) { EdgeInfo e = new EdgeInfo(); e.wayID = br.ReadInt64(); e.node1 = br.ReadInt64(); e.node2 = br.ReadInt64(); e.longLat1 = new LongLat(br.ReadDouble(), br.ReadDouble()); e.longLat2 = new LongLat(br.ReadDouble(), br.ReadDouble()); if (!edgeInfo.Contains(e)) { edgeInfo.Add(e); } } int wayInfoCount = br.ReadInt32(); for (int j = 0; j < wayInfoCount; j++) { WayInfo w = new WayInfo(); w.id = br.ReadInt64(); w.startNode = br.ReadInt64(); w.endNode = br.ReadInt64(); int keyValueCount = br.ReadInt32(); w.keys = new List <int>(); w.values = new List <int>(); w.relations = new List <long>(); for (int k = 0; k < keyValueCount; k++) { w.keys.Add(LoadIntoStringTable(br.ReadString())); w.values.Add(LoadIntoStringTable(br.ReadString())); } if (!wayInfo.ContainsKey(w.id)) { wayInfo[w.id] = w; } } int relationInfoCount = br.ReadInt32(); for (int j = 0; j < relationInfoCount; j++) { RelationInfo r = new RelationInfo(); r.id = br.ReadInt64(); int keyValueCount = br.ReadInt32(); r.keys = new List <int>(); r.values = new List <int>(); for (int k = 0; k < keyValueCount; k++) { r.keys.Add(LoadIntoStringTable(br.ReadString())); r.values.Add(LoadIntoStringTable(br.ReadString())); } int roleValuesCount = br.ReadInt32(); r.roleValues = new List <int>(); for (int k = 0; k < roleValuesCount; k++) { r.roleValues.Add(LoadIntoStringTable(br.ReadString())); } int memidsCount = br.ReadInt32(); r.memids = new List <long>(); for (int k = 0; k < memidsCount; k++) { r.memids.Add(br.ReadInt64()); if (wayInfo.ContainsKey(r.memids.Last())) { wayInfo[r.memids.Last()].relations.Add(r.id); } } int typesCount = br.ReadInt32(); r.types = new List <int>(); for (int k = 0; k < typesCount; k++) { r.types.Add(br.ReadInt32()); } if (!relationInfo.ContainsKey(r.id)) { relationInfo[r.id] = r; } } } } }
internal void SaveAll(string fileName) { string filePath = Path.Combine(OSMPaths.GetLocalCacheRoot(), fileName); using (var writer = File.Open(filePath, FileMode.Create)) { using (var bw = new BinaryWriter(writer)) { bw.Write(edgeInfo.Count); foreach (var e in edgeInfo) { bw.Write(e.wayID); bw.Write(e.node1); bw.Write(e.node2); bw.Write(e.longLat1.X); bw.Write(e.longLat1.Y); bw.Write(e.longLat2.X); bw.Write(e.longLat2.Y); } bw.Write(wayInfo.Count); foreach (var w in wayInfo.Values) { bw.Write(w.id); bw.Write(w.startNode); bw.Write(w.endNode); bw.Write(w.keys.Count); for (int i = 0; i < w.keys.Count; i++) { bw.Write(stringTable[w.keys[i]]); bw.Write(stringTable[w.values[i]]); } } bw.Write(relationInfo.Count); foreach (var r in relationInfo.Values) { bw.Write(r.id); bw.Write(r.keys.Count); for (int i = 0; i < r.keys.Count; i++) { bw.Write(stringTable[r.keys[i]]); bw.Write(stringTable[r.values[i]]); } bw.Write(r.roleValues.Count); foreach (var roleValue in r.roleValues) { bw.Write(stringTable[roleValue]); } bw.Write(r.memids.Count); foreach (var memid in r.memids) { bw.Write(memid); } bw.Write(r.types.Count); foreach (var type in r.types) { bw.Write(type); } } } } }