Exemple #1
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);
        }
 private static ITileCache <Feature> PopulateMemoryCache(GlobalSphericalMercator schema, MemoryCache <Feature> cache, int levelId)
 {
     for (var i = levelId; i >= 0; i--)
     {
         var tiles = schema.GetTileInfos(schema.Extent, i.ToString(CultureInfo.InvariantCulture));
         foreach (var tile in tiles)
         {
             if ((tile.Index.Col + tile.Index.Row) % 2 == 0) // Add only 50% of the tiles with the arbitrary rule.
             {
                 cache.Add(tile.Index, new Feature());
             }
         }
     }
     return(cache);
 }
 private static ITileCache <IFeature?> PopulateMemoryCache(GlobalSphericalMercator schema, MemoryCache <IFeature?> cache, int levelId)
 {
     for (var i = levelId; i >= 0; i--)
     {
         var tiles = schema.GetTileInfos(schema.Extent, i);
         foreach (var tile in tiles)
         {
             if ((tile.Index.Col + tile.Index.Row) % 2 == 0) // Add only 50% of the tiles with the arbitrary rule.
             {
                 cache.Add(tile.Index, new RasterFeature(new MRaster(Array.Empty <byte>(), new MRect(0, 0, 1, 1))));
             }
         }
     }
     return(cache);
 }
        public void GetTilesInViewWithBiggerExtentThanTileSchemaExtentReturnsCorrectNumberOfTiles()
        {
            // arrange
            var schema        = new GlobalSphericalMercator();
            var requestExtent = GrowExtent(schema.Extent, schema.Extent.Width);

            var counter = 0;

            foreach (var resolution in schema.Resolutions.OrderByDescending(r => r.Value.UnitsPerPixel))
            {
                // act
                var tileInfos = schema.GetTileInfos(requestExtent, resolution.Value.Level).ToList();

                // assert
                Assert.True(tileInfos.Count == (int)Math.Round(Math.Pow(4, counter++)));
                if (counter >= 6)
                {
                    break;
                }
            }
        }