public void CanCreateElementSource()
        {
            // ACT
            var observable = _elementSourceProvider.Get(CreateDefaultBoundingBox());

            // ASSERT
            Assert.IsNotNull(observable.Wait());
        }
        private IEnumerable <Element> GetElementById(long id)
        {
            var boundingBox = _tileController.CurrentTile.BoundingBox;

            var elementSources = _elementSourceProvider.Get(boundingBox).ToList().Wait();

            return(elementSources.SelectMany(es => es.Get(boundingBox, MapConsts.MaxZoomLevel)
                                             .ToArray().Wait().Where(e => e.Id == id)));
        }
예제 #3
0
        /// <summary> Ensures that the corresponding element source is loaded. </summary>
        private void EnsureElementSource(Vector2d point)
        {
            var boundingBox   = _tileController.GetTile(point).BoundingBox;
            var elementSource = _elementSourceProvider.Get(boundingBox)
                                .SingleOrDefault(e => !e.IsReadOnly).Wait();

            // create in memory element source
            if (elementSource == null)
            {
                // NOTE use bounding box which fits whole world
                var indexBuilder = new InMemoryIndexBuilder(new BoundingBox(
                                                                new GeoCoordinate(-90, -180), new GeoCoordinate(90, 180)),
                                                            IndexSettings.CreateDefault(), _objectPool, Trace);
                indexBuilder.Build();

                elementSource = new ElementSource(indexBuilder)
                {
                    IsReadOnly = false
                };
                _elementSourceProvider.Add(elementSource);
            }

            CommitIfNecessary(elementSource);

            _currentElementSource = elementSource;
            _elementSourceEditor.ElementSource = _currentElementSource;
        }
예제 #4
0
        private ElementSource GetElementSource(BoundingBox bbox)
        {
            var elementSource = _elementSourceProvider.Get(bbox).Wait() as ElementSource;

            if (elementSource == null)
            {
                throw new NotSupportedException(Strings.SearchNotSupported);
            }
            return(elementSource);
        }
예제 #5
0
        /// <inheritdoc />
        public IObservable <Unit> Load(Tile tile)
        {
            var boundingBox = tile.BoundingBox;
            var zoomLevel   = ZoomHelper.GetZoomLevel(tile.RenderMode);

            var filterElementVisitor = new CompositeElementVisitor(
                new NodeVisitor(tile, _modelLoader, _objectPool),
                new WayVisitor(tile, _modelLoader, _objectPool),
                new RelationVisitor(tile, _modelLoader, _objectPool));

            _elevationProvider.SetNullPoint(tile.RelativeNullPoint);

            // download elevation data if necessary
            if (!_elevationProvider.HasElevation(tile.BoundingBox))
            {
                _elevationProvider.Download(tile.BoundingBox).Wait();
            }

            // prepare tile
            tile.Accept(tile, _modelLoader);

            var subject = new Subject <Unit>();

            _elementSourceProvider
            .Get(tile.BoundingBox)
            .SelectMany(e => e.Get(boundingBox, zoomLevel))
            .ObserveOn(Scheduler.ThreadPool)
            .SubscribeOn(Scheduler.ThreadPool)
            .Subscribe(element => element.Accept(filterElementVisitor),
                       () =>
            {
                tile.Canvas.Accept(tile, _modelLoader);
                subject.OnCompleted();
            });

            return(subject);
        }