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); }
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); }
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 <IActionResult> Get(string layerId, int z, int x, int y, string fileExtension, string fileSerializer, [FromQuery(Name = "access_token")] string accessToken) { tileContext.Identifier = layerId; var tile = await tileRetrieverService.GetTile(z, x, y); if (tile != null) { var factory = new ProtoBufSerializationFactory(); factory.BuildFrom(tile, tileContext); var memStream = new MemoryStream(); using (var serialStream = factory.SerializeTile()) { await serialStream.CopyToAsync(memStream); } memStream.Position = 0; return(File(memStream, "application/octet-stream", "tile.pbf")); } else { return(new EmptyResult()); } //var path = files.GetFileInfo($"{layerId}.{fileExtension}.{fileSerializer}"); //var memStream = new MemoryStream(); //using (var stream = new FileStream(path.PhysicalPath, FileMode.Open)) //{ // await stream.CopyToAsync(memStream); //} //memStream.Position = 0; //return File(memStream, "application/octet-stream", "tile.pbf"); }
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 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); }
//[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 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 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); }