Ejemplo n.º 1
0
        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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        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);
                        }
                    }
                }
            }
        }