public async Task at_zoom_SEVEN_level_expect_proper_extent_coodinates()
        {
            var generator   = new Generator(TileContext, CacheAccessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));;
            var retriever   = new TileRetrieverService(CacheAccessor, TileContext, generator);
            var transformed = await retriever.GetTile(7, 26, 48);

            // These values represent the screen conversion from web mercator //
            // based on the extent provided, they should not change //
            Assert.AreEqual(997, transformed.TransformedFeatures[0].Coordinates[0].X);
            Assert.AreEqual(-34, transformed.TransformedFeatures[0].Coordinates[0].Y);

            Assert.AreEqual(2941, transformed.TransformedFeatures[0].Coordinates[1].X);
            Assert.AreEqual(-35, transformed.TransformedFeatures[0].Coordinates[1].Y);

            Assert.AreEqual(3463, transformed.TransformedFeatures[0].Coordinates[2].X);
            Assert.AreEqual(-42, transformed.TransformedFeatures[0].Coordinates[2].Y);

            Assert.AreEqual(4160, transformed.TransformedFeatures[0].Coordinates[3].X);
            Assert.AreEqual(-42, transformed.TransformedFeatures[0].Coordinates[3].Y);

            Assert.AreEqual(4160, transformed.TransformedFeatures[0].Coordinates[4].X);
            Assert.AreEqual(4160, transformed.TransformedFeatures[0].Coordinates[4].Y);

            Assert.AreEqual(-64, transformed.TransformedFeatures[0].Coordinates[5].X);
            Assert.AreEqual(4160, transformed.TransformedFeatures[0].Coordinates[5].Y);

            Assert.AreEqual(-64, transformed.TransformedFeatures[0].Coordinates[6].X);
            Assert.AreEqual(-45, transformed.TransformedFeatures[0].Coordinates[6].Y);

            Assert.AreEqual(634, transformed.TransformedFeatures[0].Coordinates[7].X);
            Assert.AreEqual(-43, transformed.TransformedFeatures[0].Coordinates[7].Y);

            Assert.AreEqual(997, transformed.TransformedFeatures[0].Coordinates[8].X);
            Assert.AreEqual(-34, transformed.TransformedFeatures[0].Coordinates[8].Y);
        }
        public async Task drill_down_from_ZERO_to_SEVEN_expect_sequential_caching()
        {
            Container.GetService <MockContextRepository>().TryGetAs("simple_points_US", out MockTileContext TileContext);


            var generator = new Generator(TileContext, CacheAccessor,
                                          new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever = new TileRetrieverService(CacheAccessor, TileContext, generator);
            await retriever.GetTile(0, 0, 0);

            // Drill down to the Denver point //
            await retriever.GetTile(1, 0, 0);

            await retriever.GetTile(2, 0, 1);

            await retriever.GetTile(3, 1, 3);

            await retriever.GetTile(4, 3, 6);

            await retriever.GetTile(5, 6, 12);

            await retriever.GetTile(6, 13, 24);

            var tile = await retriever.GetTile(7, 26, 48);
        }
        public async Task at_zoom_TWO_level_expect_proper_extent_coodinates()
        {
            var generator = new Generator(TileContext, CacheAccessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));;
            var retriever = new TileRetrieverService(CacheAccessor, TileContext, generator);

            var transformed = await retriever.GetTile(2, 0, 1);

            // These values represent the screen conversion from web mercator //
            // based on the extent provided, they should not change //
            Assert.AreEqual(3359, transformed.TransformedFeatures[0].Coordinates[0].X);
            Assert.AreEqual(2047, transformed.TransformedFeatures[0].Coordinates[0].Y);

            Assert.AreEqual(3548, transformed.TransformedFeatures[0].Coordinates[1].X);
            Assert.AreEqual(2047, transformed.TransformedFeatures[0].Coordinates[1].Y);

            Assert.AreEqual(3548, transformed.TransformedFeatures[0].Coordinates[2].X);
            Assert.AreEqual(2282, transformed.TransformedFeatures[0].Coordinates[2].Y);

            Assert.AreEqual(3229, transformed.TransformedFeatures[0].Coordinates[3].X);
            Assert.AreEqual(2281, transformed.TransformedFeatures[0].Coordinates[3].Y);

            Assert.AreEqual(3229, transformed.TransformedFeatures[0].Coordinates[4].X);
            Assert.AreEqual(2047, transformed.TransformedFeatures[0].Coordinates[4].Y);

            Assert.AreEqual(3359, transformed.TransformedFeatures[0].Coordinates[5].X);
            Assert.AreEqual(2047, transformed.TransformedFeatures[0].Coordinates[5].Y);
        }
Exemple #4
0
        public TilesController(LayerTileCacheAccessor cacheAccessor,
                               ILayerInitializationService layerService,
                               ITileContext tileContext)
        {
            this.tileContext = tileContext;

            var generator = new Generator(tileContext, cacheAccessor, layerService);

            tileRetrieverService = new TileRetrieverService(cacheAccessor, tileContext, generator);
        }
        public async Task with_many_tiled_requests_ensure_the_cache_built()
        {
            Container.GetService <MockContextRepository>().TryGetAs("simple_points", out TileContext);

            var generator = new Generator(TileContext, CacheAccessor,
                                          new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever          = new TileRetrieverService(CacheAccessor, TileContext, generator);
            var transformedWorking = await retriever.GetTile(14, 16145, 9998);

            var transformedNonWorking = await retriever.GetTile(14, 16146, 9998);
        }
Exemple #6
0
 public ProjectedDataObserver(ITopicMessengerClient messenger,
                              MessageRepository messageRepository, IFileRepository fileRepository,
                              TileRetrieverService tileService,
                              ILayerInitializationService layerService,
                              ILogger logger)
 {
     this.messenger         = messenger;
     this.messageRepository = messageRepository;
     this.fileRepository    = fileRepository;
     this.tileService       = tileService;
     this.layerService      = layerService;
     this.logger            = logger;
 }
Exemple #7
0
        public async Task given_projected_points_retrieve_points_transformed()
        {
            Container.GetService <MockContextRepository>().TryGetAs <MockTileContext>("simple_points", out MockTileContext context);

            var raw       = new LayerTileCacheAccessor(() => new MockTransformedCacheStorage(), () => new MockRawCacheStorage());
            var generator = new Generator(context, raw,
                                          new LayerInitializationFileService(Container.GetService <IFileProvider>()));

            var retriever = new TileRetrieverService(raw, context, generator);

            var tile = await retriever.GetTile(0, 0, 0);

            Assert.IsNotNull(tile);
        }
 public ProcessingService(
     IQueueObserverClient queueObserver,
     IQueueMessengerClient queueMesssenger,
     ITopicObserverClient topicObserver,
     ITopicMessengerClient TopicMessenger,
     TileRetrieverService tileRetriever,
     ILayerInitializationService layerService,
     ILogger logger)
 {
     this.queueObserver   = queueObserver;
     this.queueMesssenger = queueMesssenger;
     this.topicObserver   = topicObserver;
     this.messenger       = TopicMessenger;
     this.tileRetriever   = tileRetriever;
     this.layerService    = layerService;
     this.logger          = logger;
 }
        //[ExpectedException(typeof(NotSupportedException))]
        public async Task using_multilinestring_to_add_feature_expect_rewind()
        {
            var multiLinestring = Container.GetService <IConfigurationStrategy>().Into <Feature[]>("multi_linestring_sample_projected");

            Container.GetService <MockContextRepository>().TryGetAs <MockTileContext>("base", out MockTileContext context);

            context.TileFeatures = multiLinestring;
            var accessor  = new LayerTileCacheAccessor(() => new MockTransformedCacheStorage(), () => new MockRawCacheStorage());
            var generator = new Generator(context, accessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));

            var retriever = new TileRetrieverService(accessor, context, generator);

            var tile = await retriever.GetTile(1, 0, 0);

            // This is not supported yet so the tile is null //
            Assert.IsNull(tile);
            //Assert.AreEqual(2, tile.TransformedFeatures.Count());
        }
        public async Task at_zoom_SIX_level_expect_proper_extent_coodinates()
        {
            var generator   = new Generator(TileContext, CacheAccessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));;
            var retriever   = new TileRetrieverService(CacheAccessor, TileContext, generator);
            var transformed = await retriever.GetTile(6, 13, 24);

            // These values represent the screen conversion from web mercator //
            // based on the extent provided, they should not change //
            Assert.AreEqual(498, transformed.TransformedFeatures[0].Coordinates[0].X);
            Assert.AreEqual(-17, transformed.TransformedFeatures[0].Coordinates[0].Y);

            Assert.AreEqual(3512, transformed.TransformedFeatures[0].Coordinates[1].X);
            Assert.AreEqual(-22, transformed.TransformedFeatures[0].Coordinates[1].Y);

            Assert.AreEqual(3519, transformed.TransformedFeatures[0].Coordinates[2].X);
            Assert.AreEqual(3737, transformed.TransformedFeatures[0].Coordinates[2].Y);

            Assert.AreEqual(3041, transformed.TransformedFeatures[0].Coordinates[3].X);
            Assert.AreEqual(3735, transformed.TransformedFeatures[0].Coordinates[3].Y);

            Assert.AreEqual(2957, transformed.TransformedFeatures[0].Coordinates[4].X);
            Assert.AreEqual(3730, transformed.TransformedFeatures[0].Coordinates[4].Y);

            Assert.AreEqual(1344, transformed.TransformedFeatures[0].Coordinates[5].X);
            Assert.AreEqual(3737, transformed.TransformedFeatures[0].Coordinates[5].Y);

            Assert.AreEqual(1040, transformed.TransformedFeatures[0].Coordinates[6].X);
            Assert.AreEqual(3734, transformed.TransformedFeatures[0].Coordinates[6].Y);

            Assert.AreEqual(4, transformed.TransformedFeatures[0].Coordinates[7].X);
            Assert.AreEqual(3737, transformed.TransformedFeatures[0].Coordinates[7].Y);

            Assert.AreEqual(-2, transformed.TransformedFeatures[0].Coordinates[8].X);
            Assert.AreEqual(3730, transformed.TransformedFeatures[0].Coordinates[8].Y);

            Assert.AreEqual(-64, transformed.TransformedFeatures[0].Coordinates[9].X);
            Assert.AreEqual(3730, transformed.TransformedFeatures[0].Coordinates[9].Y);

            Assert.AreEqual(-64, transformed.TransformedFeatures[0].Coordinates[10].X);
            Assert.AreEqual(-23, transformed.TransformedFeatures[0].Coordinates[10].Y);

            Assert.AreEqual(498, transformed.TransformedFeatures[0].Coordinates[11].X);
            Assert.AreEqual(-17, transformed.TransformedFeatures[0].Coordinates[11].Y);
        }
        public async Task using_points_tile_generate_serialized_tile()
        {
            Container.GetService <MockContextRepository>().TryGetAs <MockTileContext>("simple_points", out MockTileContext context);

            var accessor  = new LayerTileCacheAccessor(() => new MockTransformedCacheStorage(), () => new MockRawCacheStorage());
            var generator = new Generator(context, accessor,
                                          new LayerInitializationFileService(Container.GetService <IFileProvider>()));

            var retriever = new TileRetrieverService(accessor, context, generator);

            var tile = await retriever.GetTile(0, 0, 0);

            var factory = new ProtoBufSerializationFactory();

            factory.BuildFrom(tile, new MockTileContext());
            var stream = factory.SerializeTile();

            Assert.IsNotNull(stream);
            Assert.AreEqual(114, stream.Length);
        }
        public async Task add_new_model_to_the_layer__with_features_expect_tile_rendering()
        {
            var layerService = new LayerInitializationFileService(Container.GetService <IFileProvider>());

            // Simulates the generation of projected features from a GEOJSON file //
            var simpleFeatures = Container.GetService <IConfigurationStrategy>().Into <List <Feature> >("populated_points_two_projected");

            var newLayer = new LayerInformationModel
            {
                Identifier = Guid.NewGuid(),
                Name       = Guid.NewGuid().ToString().Substring(0, 6),
                Properties = new Property[]
                {
                    new Property {
                        Name = LayerProperties.Features, Value = simpleFeatures, ValueType = typeof(List <IGeometryItem>)
                    }
                }
            };

            layerService.AddLayer(newLayer);

            // the Add layer method removes the features and replaces it with a count //
            Assert.AreEqual(2, newLayer.Properties.First(p => p.Name == LayerProperties.Features).Value);

            // NOW try to retrieve the tile from memory //
            var context = new SimpleTileContext()
            {
                Identifier = newLayer.Name,
                MaxZoom    = 14,
                Buffer     = 64,
                Extent     = 4096,
                Tolerance  = 3
            };
            var accessor  = new LayerTileCacheAccessor(() => new MockTransformedCacheStorage(), () => new MockRawCacheStorage());
            var generator = new Generator(context, accessor, layerService);
            var retriever = new TileRetrieverService(accessor, context, generator);

            var tile = await retriever.GetTile(1, 0, 0);

            Assert.IsNotNull(tile);
        }
        public async Task with_denver_tiled_requests_ensure_the_cache_built()
        {
            // Case 1 - Two points : Denver, US and Auckland New Zealand, only the Auckland point is returned //
            Container.GetService <MockContextRepository>().TryGetAs("simple_points_two", out MockTileContext TileContext);

            // Is this the answer from line 144 in Generator //
            TileContext.MaxAllowablePoints = 100;

            var generator = new Generator(TileContext, CacheAccessor,
                                          new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever         = new TileRetrieverService(CacheAccessor, TileContext, generator);
            var NotWorking_Denver = await retriever.GetTile(7, 26, 48);

            var aucklandAt7 = await retriever.GetTile(7, 126, 78);

            var aucklandAt3 = await retriever.GetTile(3, 7, 4);

            Container.GetService <MockContextRepository>().TryGetAs("simple_points_denver", out MockTileContext TileContext1);

            var generator1 = new Generator(TileContext1, CacheAccessor,
                                           new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever1      = new TileRetrieverService(CacheAccessor, TileContext1, generator1);
            var Working_Denver2 = await retriever1.GetTile(7, 26, 48);

            var NotWorking_aucklandAt7 = await retriever1.GetTile(7, 126, 78);

            var NotWorking_aucklandAt3 = await retriever1.GetTile(3, 7, 4);

            Container.GetService <MockContextRepository>().TryGetAs("simple_points_US", out MockTileContext TileContext2);

            var generator2 = new Generator(TileContext2, CacheAccessor,
                                           new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever2      = new TileRetrieverService(CacheAccessor, TileContext2, generator2);
            var Working_Denver3 = await retriever2.GetTile(7, 26, 48);

            var Working_Chicago = await retriever2.GetTile(7, 26, 48);

            var NotWorking_aucklandAt7_2 = await retriever2.GetTile(7, 126, 78);

            var NotWorking_aucklandAt3_2 = await retriever2.GetTile(3, 7, 4);
        }
        public async Task at_zoom_FIVE_level_expect_proper_extent_coodinates()
        {
            var generator   = new Generator(TileContext, CacheAccessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));;
            var retriever   = new TileRetrieverService(CacheAccessor, TileContext, generator);
            var transformed = await retriever.GetTile(5, 6, 12);

            // These values represent the screen conversion from web mercator //
            // based on the extent provided, they should not change //
            Assert.AreEqual(2297, transformed.TransformedFeatures[0].Coordinates[0].X);
            Assert.AreEqual(-9, transformed.TransformedFeatures[0].Coordinates[0].Y);

            Assert.AreEqual(3804, transformed.TransformedFeatures[0].Coordinates[1].X);
            Assert.AreEqual(-11, transformed.TransformedFeatures[0].Coordinates[1].Y);

            Assert.AreEqual(3808, transformed.TransformedFeatures[0].Coordinates[2].X);
            Assert.AreEqual(1868, transformed.TransformedFeatures[0].Coordinates[2].Y);

            Assert.AreEqual(3526, transformed.TransformedFeatures[0].Coordinates[3].X);
            Assert.AreEqual(1865, transformed.TransformedFeatures[0].Coordinates[3].Y);

            Assert.AreEqual(2720, transformed.TransformedFeatures[0].Coordinates[4].X);
            Assert.AreEqual(1868, transformed.TransformedFeatures[0].Coordinates[4].Y);

            Assert.AreEqual(2050, transformed.TransformedFeatures[0].Coordinates[5].X);
            Assert.AreEqual(1869, transformed.TransformedFeatures[0].Coordinates[5].Y);

            Assert.AreEqual(1258, transformed.TransformedFeatures[0].Coordinates[6].X);
            Assert.AreEqual(1866, transformed.TransformedFeatures[0].Coordinates[6].Y);

            Assert.AreEqual(1259, transformed.TransformedFeatures[0].Coordinates[7].X);
            Assert.AreEqual(1330, transformed.TransformedFeatures[0].Coordinates[7].Y);

            Assert.AreEqual(1252, transformed.TransformedFeatures[0].Coordinates[8].X);
            Assert.AreEqual(1279, transformed.TransformedFeatures[0].Coordinates[8].Y);

            Assert.AreEqual(1256, transformed.TransformedFeatures[0].Coordinates[9].X);
            Assert.AreEqual(-10, transformed.TransformedFeatures[0].Coordinates[9].Y);

            Assert.AreEqual(2297, transformed.TransformedFeatures[0].Coordinates[10].X);
            Assert.AreEqual(-9, transformed.TransformedFeatures[0].Coordinates[10].Y);
        }
        public async Task projected_into_features_initialize_layer_from_features_expect_cached_tile()
        {
            // Covers the case that the GeoJsonContext is not the context that initializes the TileRetrieverService //
            var geoJSON  = Container.GetService <IConfigurationStrategy>().GetJson("populated_points_two_US");
            var uniqueId = Guid.NewGuid().ToString().Substring(0, 6);
            var context  = new GeoJsonContext(geoJSON)
            {
                Identifier = uniqueId,
                MaxZoom    = 14,
                Buffer     = 64,
                Extent     = 4096,
                Tolerance  = 3
            };

            var tileContext = new SimpleTileContext()
            {
                MaxZoom   = 14,
                Buffer    = 64,
                Extent    = 4096,
                Tolerance = 3
            };

            var accessor  = new LayerTileCacheAccessor(() => new MockTransformedCacheStorage(), () => new MockRawCacheStorage());
            var generator = new Generator(tileContext, accessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever = new TileRetrieverService(accessor, tileContext, generator);

            var pipeline = new DetermineCollectionsTypePipeline()
                           .ExtendWith(new ParseGeoJsonToFeatures()
                                       .IterateWith(new ProjectGeoJSONToGeometric(
                                                        (geoItem) => new WebMercatorProcessor(geoItem)))
                                       .ExtendWith(new GeometricSimplification())
                                       .ExtendWith(new InitializeProjectedFeatures(retriever)));

            await pipeline.Process(context);

            // Its important that this succeeded //
            Assert.IsNotNull(context.Features);
        }
        public async Task project_raw_points_into_features_initialize_layer_from_features_expect_cached_tile()
        {
            var geoJSON  = Container.GetService <IConfigurationStrategy>().GetJson("populated_points_two_US");
            var uniqueId = Guid.NewGuid().ToString().Substring(0, 6);
            var context  = new GeoJsonContext(geoJSON)
            {
                Identifier = uniqueId,
                MaxZoom    = 14,
                Buffer     = 64,
                Extent     = 4096,
                Tolerance  = 3
            };

            var accessor  = new LayerTileCacheAccessor(() => new MockTransformedCacheStorage(), () => new MockRawCacheStorage());
            var generator = new Generator(context, accessor, new LayerInitializationFileService(Container.GetService <IFileProvider>()));
            var retriever = new TileRetrieverService(accessor, context, generator);

            var pipeline = new DetermineCollectionsTypePipeline()
                           .ExtendWith(new ParseGeoJsonToFeatures()
                                       .IterateWith(new ProjectGeoJSONToGeometric(
                                                        (geoItem) => new WebMercatorProcessor(geoItem)))
                                       .ExtendWith(new GeometricSimplification())
                                       .ExtendWith(new InitializeProjectedFeatures(retriever)));

            await pipeline.Process(context);

            var tile = await retriever.GetTile(1, 0, 0);

            Assert.IsNotNull(tile);
            var transformed = tile as ITransformedTile;
            var featue      = transformed.TransformedFeatures.First();

            (int X, int Y)coordinates = transformed.TransformedFeatures.First().Coordinates.First();
            Assert.AreEqual(1707, coordinates.X);
            Assert.AreEqual(3109, coordinates.Y);
        }
Exemple #17
0
 public InitializeProjectedFeatures(TileRetrieverService generator)
 {
     this.generator = generator;
 }