Ejemplo n.º 1
0
        /// <summary>
        /// Deserializes a graph router data source from the given stream.
        /// </summary>
        /// <param name="stream"></param>
        /// <param name="edgeDataSize"></param>
        /// <param name="mapFrom"></param>
        /// <param name="mapTo"></param>
        /// <returns></returns>
        public new static RouterDataSource <TEdgeData> Deserialize(System.IO.Stream stream, int edgeDataSize,
                                                                   MappedHugeArray <TEdgeData, uint> .MapFrom mapFrom, MappedHugeArray <TEdgeData, uint> .MapTo mapTo, bool copy)
        {
            // read size of graph and start location of tags.
            var longBytes = new byte[8];

            stream.Read(longBytes, 0, 8);
            var position = BitConverter.ToInt64(longBytes, 0);

            // deserialize graph.
            var graph = GraphBase <TEdgeData> .Deserialize(new CappedStream(stream, 8, position - 8), edgeDataSize, mapFrom, mapTo, copy);

            // deserialize tags.
            stream.Seek(position, System.IO.SeekOrigin.Begin);
            var tagsIndex = global::OsmSharp.Collections.Tags.Index.TagsIndex.Deserialize(
                new LimitedStream(stream));

            return(new RouterDataSource <TEdgeData>(graph, tagsIndex));
        }