Exemplo n.º 1
0
        public override void Build()
        {
            var sw = new Stopwatch();

            sw.Start();

            var kvUsageMemoryStream = new MemoryStream();

            KvUsage = new KeyValueUsage(kvUsageMemoryStream);

            var keyValueStoreFile = new MemoryStream();

            KvIndex = new KeyValueIndex(Settings.Search.KvIndexCapacity, Settings.Search.PrefixLength);
            KvStore = new KeyValueStore(KvIndex, KvUsage, keyValueStoreFile);

            var storeFile = new MemoryStream();

            Store = new ElementStore(KvStore, storeFile, ObjectPool);
            Tree  = new RTree <uint>(65);

            _reader.Read(new ReaderContext
            {
                SourceStream  = _sourceStream,
                Builder       = this,
                ReuseEntities = false,
                SkipTags      = false,
            });
            Clear();
            Complete();

            sw.Stop();
            Trace.Debug(CategoryKey, Strings.IndexBuildInMs, sw.ElapsedMilliseconds.ToString());
        }
Exemplo n.º 2
0
 /// <summary>
 ///     Creates instance of <see cref="ElementSource" /> from streams and
 ///     created spatial index.
 /// </summary>
 internal ElementSource(BoundingBox boundingBox, KeyValueUsage keyValueUsage, KeyValueIndex keyValueIndex, KeyValueStore keyValueStore,
                        ElementStore elementStore, ISpatialIndex <uint> spatialIndex)
 {
     BoundingBox      = boundingBox;
     KvUsage          = keyValueUsage;
     KvIndex          = keyValueIndex;
     KvStore          = keyValueStore;
     ElementStore     = elementStore;
     SpatialIndexTree = spatialIndex;
     IsReadOnly       = true;
 }
Exemplo n.º 3
0
 /// <summary> Creates instance of <see cref="ElementSource" /> from persistent storage. </summary>
 /// <param name="directory">Already resolved directory which contains all indecies.</param>
 /// <param name="fileService">File system service.</param>
 /// <param name="objectPool">ObjectPool.</param>
 internal ElementSource(string directory, IFileSystemService fileService, IObjectPool objectPool)
 {
     // load map data from streams
     BoundingBox      = PersistentIndexBuilder.ReadBoundingBox(fileService.ReadStream(string.Format(MapConsts.HeaderPathFormat, directory)));
     KvUsage          = new KeyValueUsage(fileService.ReadStream(string.Format(MapConsts.KeyValueUsagePathFormat, directory)));
     KvIndex          = KeyValueIndex.Load(fileService.ReadStream(string.Format(MapConsts.KeyValueIndexPathFormat, directory)));
     KvStore          = new KeyValueStore(KvIndex, KvUsage, fileService.ReadStream(string.Format(MapConsts.KeyValueStorePathFormat, directory)));
     ElementStore     = new ElementStore(KvStore, fileService.ReadStream(string.Format(MapConsts.ElementStorePathFormat, directory)), objectPool);
     SpatialIndexTree = SpatialIndex.Load(fileService.ReadStream(string.Format(MapConsts.SpatialIndexPathFormat, directory)));
     IsReadOnly       = true;
 }
Exemplo n.º 4
0
        public void Setup()
        {
            var buffer = new byte[256];
            var stream = new MemoryStream(buffer);

            stream.WriteByte(4);
            stream.WriteByte(7);

            var kvUsage = new KeyValueUsage(new MemoryStream(1000));
            var index   = new KeyValueIndex(100, 3);

            _store = new KeyValueStore(index, kvUsage, stream);
        }
Exemplo n.º 5
0
        public void Setup()
        {
            var keyValueStream = new MemoryStream(new byte[256]);

            keyValueStream.WriteByte(4);
            keyValueStream.WriteByte(7);

            var kvUsage       = new KeyValueUsage(new MemoryStream(1000));
            var index         = new KeyValueIndex(100, 3);
            var keyValueStore = new KeyValueStore(index, kvUsage, keyValueStream);

            var elementStoreStream = new MemoryStream(new byte[10000]);

            _store = new ElementStore(keyValueStore, elementStoreStream, TestHelper.GetObjectPool());
        }
Exemplo n.º 6
0
        public override void Build()
        {
            var sw = new Stopwatch();

            sw.Start();

            var sourceStream = _fileSystemService.ReadStream(_filePath);
            var format       = _filePath.Split('.').Last();
            var reader       = GetReader(format);

            var kvUsageMemoryStream = new MemoryStream();
            var kvUsage             = new KeyValueUsage(kvUsageMemoryStream);

            var keyValueStoreFile = _fileSystemService.WriteStream(String.Format(MapConsts.KeyValueStorePathFormat, _outputDirectory));
            var index             = new KeyValueIndex(Settings.Search.KvIndexCapacity, Settings.Search.PrefixLength);
            var keyValueStore     = new KeyValueStore(index, kvUsage, keyValueStoreFile);

            var storeFile = _fileSystemService.WriteStream(String.Format(MapConsts.ElementStorePathFormat, _outputDirectory));

            Store = new ElementStore(keyValueStore, storeFile, ObjectPool);
            Tree  = new RTree <uint>(65);

            reader.Read(new ReaderContext
            {
                SourceStream  = sourceStream,
                Builder       = this,
                ReuseEntities = false,
                SkipTags      = false,
            });

            Clear();
            Complete();

            using (var kvFileStream = _fileSystemService.WriteStream(String.Format(MapConsts.KeyValueUsagePathFormat, _outputDirectory)))
            {
                var buffer = kvUsageMemoryStream.GetBuffer();
                kvFileStream.Write(buffer, 0, (int)kvUsageMemoryStream.Length);
            }

            KeyValueIndex.Save(index, _fileSystemService.WriteStream(String.Format(MapConsts.KeyValueIndexPathFormat, _outputDirectory)));
            SpatialIndex.Save(Tree, _fileSystemService.WriteStream(String.Format(MapConsts.SpatialIndexPathFormat, _outputDirectory)));
            Store.Dispose();

            sw.Stop();
            Trace.Debug(CategoryKey, Strings.IndexBuildInMs, sw.ElapsedMilliseconds.ToString());
        }
Exemplo n.º 7
0
        public void Setup()
        {
            var boundingBox    = new BoundingBox(new GeoCoordinate(52.0, 13.0), new GeoCoordinate(52.2, 13.2));
            var keyValueStream = new MemoryStream(new byte[256]);

            keyValueStream.WriteByte(4);
            keyValueStream.WriteByte(7);

            var kvIndex = new KeyValueIndex(100, 3);
            var kvUsage = new KeyValueUsage(new MemoryStream(1000));
            var kvStore = new KeyValueStore(kvIndex, kvUsage, keyValueStream);

            var elementStoreStream = new MemoryStream(new byte[10000]);
            var elementStore       = new ElementStore(kvStore, elementStoreStream, TestHelper.GetObjectPool());
            var tree = new RTree <uint>();

            var node = new Node()
            {
                Id         = 1,
                Coordinate = new GeoCoordinate(52.0, 13.0),
                Tags       = new Dictionary <string, string>()
                {
                    { "key1", "value1" }, { "key2", "value2" }
                }.ToTags()
            };
            var nodeOffset = elementStore.Insert(node);

            tree.Insert(nodeOffset, new PointEnvelop(node.Coordinate));
            var way = new Way()
            {
                Id          = 2,
                Coordinates = new List <GeoCoordinate>()
                {
                    new GeoCoordinate(52.1, 13.1), new GeoCoordinate(52.2, 13.2)
                },
                Tags = new Dictionary <string, string>()
                {
                    { "key1", "value1" }, { "key2", "value2" }
                }.ToTags()
            };
            var wayOffset = elementStore.Insert(way);

            tree.Insert(wayOffset, new Envelop(way.Coordinates.First(), way.Coordinates.Last()));

            _source = new ElementSource(boundingBox, kvUsage, kvIndex, kvStore, elementStore, tree);
        }