public WmscLayerConfiguration(string fileCacheRoot, string name, WmscTileSource source)
            : base(BruTileLayerPlugin.Settings.PermaCacheType, fileCacheRoot)
        {
            _fileCacheRoot = fileCacheRoot;
            LegendText     = name;

            var provider = ReflectionHelper.Reflect(source) as HttpTileProvider;

            if (provider == null)
            {
                throw new ArgumentException("Source does not have a WebTileProvider", "source");
            }

            var request = ReflectionHelper.ReflectRequest <WmscRequest>(provider);

            if (request == null)
            {
                throw new ArgumentException("Source does not have a WmscRequest", "source");
            }

            SafeRequest(request);
            SafeSchema(source.Schema);

            TileSource = source;
            TileCache  = CreateTileCache();

            _tileFetcher = new TileFetcher(provider, BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum, TileCache);
            _initialized = true;
        }
Exemple #2
0
        public void TileFetcherShouldBehaveProperlyWithNoisyResponses()
        {
            // Arrange
            var schema      = new GlobalSphericalMercator();
            var tileSource  = new TileSource(new SometimesFailingTileProvider(), schema);
            var memoryCache = new MemoryCache <Feature>(14, 17);
            var tileFetcher = new TileFetcher(tileSource, memoryCache);
            var random      = new Random(31747074);
            var tiles       = new List <Feature>();

            // Act
            for (int i = 0; i < 100; i++)
            {
                var randomLevel   = "5";
                var randomCol     = random.Next(schema.GetMatrixWidth(randomLevel));
                var randomRow     = random.Next(schema.GetMatrixHeight(randomLevel));
                var tileRange     = new TileRange(randomCol - 2, randomRow - 2, 5, 5);
                var unitsPerPixel = schema.Resolutions[randomLevel].UnitsPerPixel;
                var extent        = TileTransform.TileToWorld(tileRange, randomLevel, schema);
                tileFetcher.ViewChanged(TileTransform.TileToWorld(tileRange, randomLevel, schema).ToBoundingBox(), unitsPerPixel);
                var tileInfos = schema.GetTileInfos(extent, randomLevel);
                foreach (var tileInfo in tileInfos)
                {
                    tiles.Add(memoryCache.Find(tileInfo.Index));
                }
            }

            // Assert
            Assert.True(tiles.Count > 0);
            Assert.True(memoryCache.TileCount == 0);
        }
Exemple #3
0
 protected void SetTileSource(ITileSource source)
 {
     tileSource               = source;
     tileFetcher              = new TileFetcher(source, memoryCache, maxRetries);
     tileFetcher.DataChanged += TileFetcherDataChanged;
     OnPropertyChanged("Envelope");
 }
 /// <summary>
 /// Method called prior to any tile access
 /// </summary>
 public void Initialize()
 {
     _tileFetcher = new TileFetcher(ReflectionHelper.Reflect(TileSource),
                                    BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                    BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                    TileCache);
 }
        public void Initialize()
        {
            if (_initialized)
            {
                return;
            }
            _initialized = true;


            var tileSources = GetTileSources(_capabilitiesUri);
            var tileSource  = tileSources.FirstOrDefault(ts => ts.Name.Equals(LegendText, StringComparison.InvariantCulture));

            if (tileSource == null)
            {
                throw new ArgumentException("TileSource not found", "capabilitiesUri");
            }

            TileSource = tileSource;
            var provider = ((HttpTileProvider)ReflectionHelper.Reflect(tileSource));

            TileCache = CreateTileCache();

            _tileFetcher = new TileFetcher(provider,
                                           BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                           TileCache);
        }
        public void TileFetcherShouldRequestAllTilesJustOnes()
        {
            // Arrange
            var tileProvider  = new CountingTileProvider();
            var tileSchema    = new GlobalSphericalMercator();
            var tileSource    = new TileSource(tileProvider, tileSchema);
            var tileFetcher   = new TileFetcher(tileSource, new MemoryCache <Feature>(), 2, 8, new MinimalFetchStrategy());
            var level         = "4";
            var expextedTiles = 256;

            // Act
            // Get all tiles of level 3
            tileFetcher.ViewChanged(tileSchema.Extent.ToBoundingBox(), tileSchema.Resolutions[level].UnitsPerPixel);

            // Assert
            while (tileFetcher.Busy)
            {
            }

            Assert.AreEqual(expextedTiles, tileProvider.CountByTile.Keys.Count);
            //!!! This is an actual bug: Assert.AreEqual(expextedTiles, tileProvider.CountByTile.Values.Sum());
            //!!! This is an actual bug: Assert.AreEqual(expextedTiles, tileProvider.TotalCount);

            Assert.Pass("The fetcher did not go into an infinite loop");
        }
 /// <summary>
 /// Method called prior to any tile access
 /// </summary>
 public void Initialize()
 {
     _tileFetcher = new TileFetcher(ReflectionHelper.Reflect(TileSource),
                                    BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                    BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                    TileCache);
 }
Exemple #8
0
        public void TileFetcherWithReturningNull()
        {
            // Arrange
            var tileProvider = new NullTileProvider();
            var tileSchema   = new GlobalSphericalMercator();
            var tileSource   = new TileSource(tileProvider, tileSchema);
            var tileFetcher  = new TileFetcher(tileSource, new MemoryCache <Feature>());

            // Act
            for (int i = 0; i < 300; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    tileFetcher.ViewChanged(tileSchema.Extent.ToBoundingBox(), tileSchema.Resolutions[j.ToString()].UnitsPerPixel);
                    System.Threading.Thread.Sleep(10);
                }
            }

            // Assert
            while (tileFetcher.Busy)
            {
            }
            ;

            Assert.Pass("The fetcher did not go into an infinite loop");
        }
Exemple #9
0
        [Test] // handing in build server but not on client
        public void TileFetcherShouldBehaveProperlyWithTileProviderReturningNull()
        {
            // Arrange
            var schema      = new GlobalSphericalMercator();
            var tileSource  = new TileSource(new NullTileProvider(), schema);
            var memoryCache = new MemoryCache <Feature>();
            var tileFetcher = new TileFetcher(tileSource, memoryCache);

            // Act
            Task.Run(() =>
            {
                Task.Delay(5000);
                if (tileFetcher.Busy)
                {
                    Assert.Fail("The fetcher hangs");
                }
            });
            tileFetcher.ViewChanged(schema.Extent.ToBoundingBox(), schema.Resolutions["2"].UnitsPerPixel);
            while (tileFetcher.Busy)
            {
            }

            // Assert
            Assert.True(memoryCache.TileCount == 0);
        }
Exemple #10
0
 public VectorTileLayer(ITileSource tileSource, RenderGetStrategy renderStrategy = null)
 {
     _tileSource                   = tileSource;
     _tileFetcher                  = new TileFetcher(_tileSource, _tileCache, 1, 4, _fetchStrategy);
     _tileFetcher.DataChanged     += TileFetcherOnDataChanged;
     _tileFetcher.PropertyChanged += TileFetcherOnPropertyChanged;
     _renderStrategy               = renderStrategy ?? new RenderGetStrategy();
 }
Exemple #11
0
        private void AbortFetcher()
        {
            if (_tileFetcher == null)
            {
                return;
            }
            var tileFetcher = _tileFetcher;

            _tileFetcher = null;
            tileFetcher.AbortFetch();
            tileFetcher.DataChanged     -= TileFetcherDataChanged;
            tileFetcher.PropertyChanged -= TileFetcherOnPropertyChanged;
        }
        public MbTilesConfiguration(string mbtilesFile)
        {
            _mbTilesFile = mbtilesFile;
            LegendText = Path.GetFileNameWithoutExtension(_mbTilesFile);

#if DEBUG
            SQLiteLog.Enabled = true;
#endif
            var uri = new Uri(_mbTilesFile);
            var tileSource = new MbTilesTileSource(uri.LocalPath);
            TileSource = tileSource;
            TileFetcher = new TileFetcher(tileSource.Provider, 
                BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                BruTileLayerPlugin.Settings.MemoryCacheMaximum, 
                new TileFetcher.NoopCache());
        }
        public MbTilesConfiguration(string mbtilesFile)
        {
            _mbTilesFile = mbtilesFile;
            LegendText   = Path.GetFileNameWithoutExtension(_mbTilesFile);

#if DEBUG
            SQLiteLog.Enabled = true;
#endif
            var uri        = new Uri(_mbTilesFile);
            var tileSource = new MbTilesTileSource(uri.LocalPath);
            TileSource  = tileSource;
            TileFetcher = new TileFetcher(tileSource.Provider,
                                          BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                          BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                          new TileFetcher.NoopCache());
        }
Exemple #14
0
        public void TileFetcherShouldBehaveProperlyWithFailingTileRequests()
        {
            // Arrange
            var schema      = new GlobalSphericalMercator();
            var tileSource  = new TileSource(new FailingTileProvider(), schema);
            var memoryCache = new MemoryCache <Feature>();
            var tileFetcher = new TileFetcher(tileSource, memoryCache);

            // Act
            tileFetcher.ViewChanged(schema.Extent.ToBoundingBox(), schema.Resolutions["2"].UnitsPerPixel);
            while (tileFetcher.Busy)
            {
            }

            // Assert
            Assert.True(memoryCache.TileCount == 0);
        }
 /// <summary>
 /// Sets the tile source.
 /// </summary>
 /// <param name="source"></param>
 protected void SetTileSource(ITileSource source)
 {
     if (_tileFetcher != null)
     {
         _tileFetcher.AbortFetch();
         _tileFetcher.DataChanged     -= TileFetcherDataChanged;
         _tileFetcher.PropertyChanged -= TileFetcherOnPropertyChanged;
         _tileFetcher = null;
         _bitmaps.Clear();
     }
     _source = source;
     if (source == null)
     {
         return;
     }
     _tileFetcher                  = new TileFetcher(source, _bitmaps, _maxRetries, _maxThreads, _fetchStrategy, _fileCache);
     _tileFetcher.DataChanged     += TileFetcherDataChanged;
     _tileFetcher.PropertyChanged += TileFetcherOnPropertyChanged;
 }
        public WmtsLayerConfiguration(string fileCacheRoot, string name, ITileSource tileSource)
            :base(BruTileLayerPlugin.Settings.PermaCacheType, fileCacheRoot)
        {
            _fileCacheRoot = fileCacheRoot;

            LegendText = name;

            //var tileSources = GetTileSources(capabilitiesUri);
            //var tileSource = tileSources.FirstOrDefault(ts => ts.Title.Equals(name, StringComparison.InvariantCulture));
            if (tileSource == null)
                throw new ArgumentException("TileSource not found", "capabilitiesUri");

            TileSource = tileSource;
            TileCache = CreateTileCache();

            _tileFetcher = new TileFetcher(ReflectionHelper.Reflect(tileSource), BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum, TileCache);
            _initialized = true;
        }
        /// <summary>
        /// Method called prior to any tile access
        /// </summary>
        public void Initialize()
        {
            if (_initialized)
            {
                return;
            }
            _initialized = true;

            var schema  = RestoreSchema();
            var request = new WmscRequest(new Uri(_url), schema, _layers, _styles, _customParameters, _version);

            ITileProvider provider = new HttpTileProvider(request);

            TileSource   = (WmscTileSource)Activator.CreateInstance(typeof(WmscTileSource), BindingFlags.NonPublic, schema, provider);
            TileCache    = CreateTileCache();
            _tileFetcher = new TileFetcher(provider,
                                           BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                           TileCache);
        }
Exemple #18
0
        protected virtual void Dispose(bool disposing)
        {
            if (IsDisposed)
            {
                return;
            }

            if (disposing)
            {
                TileFetcher?.Dispose();
            }

            if (fileCache != null)
            {
                FileCacheManager.Instance.UnsubscribeFileCache(fileCache);
                fileCache = null;
            }

            IsDisposed = true;
        }
        public KnownTileLayerConfiguration(string fileCacheRoot, KnownTileSource tileSource, string apiKey) 
            : base(BruTileLayerPlugin.Settings.PermaCacheType, 
                   fileCacheRoot ?? Path.Combine(BruTileLayerPlugin.Settings.PermaCacheRoot , tileSource.ToString()))
        {
            _knownTileSource = tileSource;
            _apiKey = apiKey;
            /*
            if (tileServers == KnownTileServers.Custom)
                throw new NotSupportedException();
            */

            TileSource = KnownTileSources.Create(tileSource, apiKey);
            TileCache = CreateTileCache();
            LegendText = tileSource.ToString();

            _tileFetcher = new TileFetcher(ReflectionHelper.Reflect(TileSource),
                                           BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                           TileCache);
        }
        public KnownTileLayerConfiguration(string fileCacheRoot, KnownTileSource tileSource, string apiKey)
            : base(BruTileLayerPlugin.Settings.PermaCacheType,
                   fileCacheRoot ?? Path.Combine(BruTileLayerPlugin.Settings.PermaCacheRoot, tileSource.ToString()))
        {
            _knownTileSource = tileSource;
            _apiKey          = apiKey;

            /*
             * if (tileServers == KnownTileServers.Custom)
             *  throw new NotSupportedException();
             */

            TileSource = KnownTileSources.Create(tileSource, apiKey);
            TileCache  = CreateTileCache();
            LegendText = tileSource.ToString();

            _tileFetcher = new TileFetcher(ReflectionHelper.Reflect(TileSource),
                                           BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                           TileCache);
        }
        public WmtsLayerConfiguration(string fileCacheRoot, string name, ITileSource tileSource)
            : base(BruTileLayerPlugin.Settings.PermaCacheType, fileCacheRoot)
        {
            _fileCacheRoot = fileCacheRoot;

            LegendText = name;

            //var tileSources = GetTileSources(capabilitiesUri);
            //var tileSource = tileSources.FirstOrDefault(ts => ts.Title.Equals(name, StringComparison.InvariantCulture));
            if (tileSource == null)
            {
                throw new ArgumentException("TileSource not found", "capabilitiesUri");
            }

            TileSource = tileSource;
            TileCache  = CreateTileCache();

            _tileFetcher = new TileFetcher(ReflectionHelper.Reflect(tileSource), BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum, TileCache);
            _initialized = true;
        }
Exemple #22
0
        protected void SetTileSource(ITileSource source)
        {
            if (_tileSource != null)
            {
                _tileFetcher.AbortFetch();
                _tileFetcher.DataChanged     -= TileFetcherDataChanged;
                _tileFetcher.PropertyChanged -= TileFetcherOnPropertyChanged;
                _tileFetcher = null;
                _memoryCache.Clear();
            }
            _tileSource = source;

            if (source == null)
            {
                return;
            }
            _tileFetcher                  = new TileFetcher(source, _memoryCache, _maxRetries, _maxThreads, _fetchStrategy);
            _tileFetcher.DataChanged     += TileFetcherDataChanged;
            _tileFetcher.PropertyChanged += TileFetcherOnPropertyChanged;
            OnPropertyChanged("Envelope");
        }
Exemple #23
0
        public void TileFetcherWithFailingFetchesTest()
        {
            // Arrange
            var tileProvider = new SometimesFailingTileProvider();
            var tileSchema = new GlobalSphericalMercator();
            var tileSource = new TileSource(tileProvider, tileSchema);
            var tileFetcher = new TileFetcher(tileSource, new MemoryCache<Feature>(), 2, 8);

            // Act
            for (int i = 0; i < 100; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    tileFetcher.ViewChanged(tileSchema.Extent.ToBoundingBox(), tileSchema.Resolutions[j.ToString()].UnitsPerPixel);
                }
            }

            // Assert
            while (tileFetcher.Busy) { }

            Assert.Pass("The fetcher did not go into an infinite loop");
        }
Exemple #24
0
        protected void SetTileSource(ITileSource source)
        {
            if (_tileSource != null)
            {
                // Is causing thread leak _tileFetcher.AbortFetch();
                _tileFetcher.DataChanged     -= TileFetcherDataChanged;
                _tileFetcher.PropertyChanged -= TileFetcherOnPropertyChanged;
                _tileFetcher = null;
                _memoryCache.Clear();
            }

            _tileSource = source;

            if (_tileSource != null)
            {
                Attribution.Text              = _tileSource.Attribution.Text;
                Attribution.Url               = _tileSource.Attribution.Url;
                _tileFetcher                  = new TileFetcher(source, _memoryCache, _maxRetries, _maxThreads, _fetchStrategy);
                _tileFetcher.DataChanged     += TileFetcherDataChanged;
                _tileFetcher.PropertyChanged += TileFetcherOnPropertyChanged;
                OnPropertyChanged(nameof(Envelope));
            }
        }
Exemple #25
0
 private void CreateFetcher(ITileSource source)
 {
     _tileFetcher                  = new TileFetcher(source, _memoryCache, _maxRetries, _maxThreads, _fetchStrategy);
     _tileFetcher.DataChanged     += TileFetcherDataChanged;
     _tileFetcher.PropertyChanged += TileFetcherOnPropertyChanged;
 }
 public TileLayer(TileSource source, ITileFactory <T> tileFactory)
 {
     this.schema              = source.Schema;
     tileFetcher              = new TileFetcher <T>(source, memoryCache, tileFactory);
     tileFetcher.DataChanged += new DataChangedEventHandler(tileFetcher_DataChanged);
 }
        /// <summary>
        /// Creates an instanc of this class using the given <paramref name="configuration"/>
        /// </summary>
        /// <param name="configuration">The configuration</param>
        public BruTileLayer(IConfiguration configuration)
        {
            if (configuration == null)
                throw new ArgumentNullException("configuration");

            var data = base.ContextMenuItems.Find(m => m.Name == "Data");
            if (data != null) base.ContextMenuItems.Remove(data);

            /*
            data = base.ContextMenuItems.Find(m => m.Name.StartsWith("Attrib"));
            if (data != null) base.ContextMenuItems.Remove(data);
             */

            // Initialize the configuration prior to usage
            configuration.Initialize();

            // 
            _configuration = configuration;
            var tileSource = configuration.TileSource;
            _projectionInfo = AuthorityCodeHandler.Instance[tileSource.Schema.Srs];
            if (_projectionInfo == null)
                _projectionInfo = AuthorityCodeHandler.Instance["EPSG:3857"];
            
            // WebMercator: set datum to WGS1984 for better accuracy 
            if (tileSource.Schema.Srs == "EPSG:3857") _projectionInfo.GeographicInfo.Datum = KnownCoordinateSystems.Geographic.World.WGS1984.GeographicInfo.Datum;
            
            Projection = _projection;
            var extent = tileSource.Schema.Extent;
            MyExtent = new Extent(extent.MinX, extent.MinY, extent.MaxX, extent.MaxY);

            base.LegendText = configuration.LegendText;
            base.LegendItemVisible = true;
            base.IsVisible = base.Checked = true;

            base.LegendSymbolMode = SymbolMode.Symbol;
            LegendType = LegendType.Custom;
            
            _tileFetcher = configuration.TileFetcher;
            _tileFetcher.TileReceived += HandleTileReceived;
            _tileFetcher.QueueEmpty += HandleQueueEmpty;

            //Set the wrap mode
            _imageAttributes = new ImageAttributes();
            _imageAttributes.SetWrapMode(WrapMode.TileFlipXY);
        }
        public WmscLayerConfiguration(string fileCacheRoot, string name, WmscTileSource source)
            : base(BruTileLayerPlugin.Settings.PermaCacheType, fileCacheRoot)
        {
            _fileCacheRoot = fileCacheRoot;
            LegendText = name;

            var provider = ReflectionHelper.Reflect(source) as HttpTileProvider;
            if (provider == null)
                throw new ArgumentException("Source does not have a WebTileProvider", "source");

            var request = ReflectionHelper.ReflectRequest<WmscRequest>(provider);
            if (request == null)
                throw new ArgumentException("Source does not have a WmscRequest" ,"source");

            SafeRequest(request);
            SafeSchema(source.Schema);

            TileSource = source;
            TileCache = CreateTileCache();

            _tileFetcher = new TileFetcher(provider, BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum, TileCache);
            _initialized = true;
        }
        /// <summary>
        /// Method called prior to any tile access
        /// </summary>
        public void Initialize()
        {
            if (_initialized) return;
            _initialized = true;

            var schema = RestoreSchema();
            var request = new WmscRequest(new Uri(_url), schema, _layers, _styles, _customParameters, _version);
            
            ITileProvider provider = new HttpTileProvider(request);
            TileSource = (WmscTileSource)Activator.CreateInstance(typeof(WmscTileSource), BindingFlags.NonPublic, schema, provider);
            TileCache = CreateTileCache();
            _tileFetcher = new TileFetcher(provider,
                                           BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                           TileCache);

        }
        public void Initialize()
        {
            if (_initialized) return;
            _initialized = true;


            var tileSources = GetTileSources(_capabilitiesUri);
            var tileSource = tileSources.FirstOrDefault(ts => ts.Name.Equals(LegendText, StringComparison.InvariantCulture));
            if (tileSource == null)
                throw new ArgumentException("TileSource not found", "capabilitiesUri");

            TileSource = tileSource;
            var provider = ((HttpTileProvider)ReflectionHelper.Reflect(tileSource));

            TileCache = CreateTileCache();

            _tileFetcher = new TileFetcher(provider,
                                           BruTileLayerPlugin.Settings.MemoryCacheMinimum,
                                           BruTileLayerPlugin.Settings.MemoryCacheMaximum,
                                           TileCache);
        }