public void MultiTileMapTest() { IImageTileSerializer serializer = new MockClasses.MockTileSerializer(); MockClasses.MockColorMap map = new MockClasses.MockColorMap(); map.ExpectedLongitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); map.ExpectedLatitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); // Expected value at pixel (0,0) map.ExpectedLongitudes[0] = -179.296875; map.ExpectedLatitudes[0] = 84.9901001802348; // Expected value at pixel (100,100) map.ExpectedLongitudes[100 + 100 * 256] = -38.671875; map.ExpectedLatitudes[100 + 100 * 256] = 36.031331776331868; MercatorTileCreator mercator = new MercatorTileCreator(map, serializer); // Toast map MockClasses.MockColorMap toastMap = new MockClasses.MockColorMap(); toastMap.ExpectedLongitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); toastMap.ExpectedLatitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); // Expected value at pixel (0,0) toastMap.ExpectedLongitudes[0] = -5.44921875; toastMap.ExpectedLatitudes[0] = -89.309545852399211; // Expected value at pixel (100,100) toastMap.ExpectedLongitudes[100 + 100 * 256] = -45.0; toastMap.ExpectedLatitudes[100 + 100 * 256] = 59.83399091605358; ToastTileCreator toast = new ToastTileCreator(toastMap, serializer); MultiTileCreator multiCreator = new MultiTileCreator(new Collection <ITileCreator>() { mercator, toast }, ProjectionTypes.Mercator); multiCreator.Create(0, 0, 0); multiCreator.CreateParent(0, 0, 0); // Validate Mercator file Assert.AreEqual(ProjectionTypes.Mercator, multiCreator.ProjectionType); }
public void MultiTileMapTest() { IImageTileSerializer serializer = new MockClasses.MockTileSerializer(); MockClasses.MockColorMap map = new MockClasses.MockColorMap(); map.ExpectedLongitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); map.ExpectedLatitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); // Expected value at pixel (0,0) map.ExpectedLongitudes[0] = -179.296875; map.ExpectedLatitudes[0] = 84.9901001802348; // Expected value at pixel (100,100) map.ExpectedLongitudes[100 + 100 * 256] = -38.671875; map.ExpectedLatitudes[100 + 100 * 256] = 36.031331776331868; MercatorTileCreator mercator = new MercatorTileCreator(map, serializer); // Toast map MockClasses.MockColorMap toastMap = new MockClasses.MockColorMap(); toastMap.ExpectedLongitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); toastMap.ExpectedLatitudes = Enumerable.Range(0, Constants.TileSize * Constants.TileSize).Select(i => double.NaN).ToArray(); // Expected value at pixel (0,0) toastMap.ExpectedLongitudes[0] = -5.44921875; toastMap.ExpectedLatitudes[0] = -89.309545852399211; // Expected value at pixel (100,100) toastMap.ExpectedLongitudes[100 + 100 * 256] = -45.0; toastMap.ExpectedLatitudes[100 + 100 * 256] = 59.83399091605358; ToastTileCreator toast = new ToastTileCreator(toastMap, serializer); MultiTileCreator multiCreator = new MultiTileCreator(new Collection<ITileCreator>() { mercator, toast }, ProjectionTypes.Mercator); multiCreator.Create(0, 0, 0); multiCreator.CreateParent(0, 0, 0); // Validate Mercator file Assert.AreEqual(ProjectionTypes.Mercator, multiCreator.ProjectionType); }
public void InvalidateMultitileCreatorForNullValue() { MultiTileCreator multiCreator = new MultiTileCreator(null, ProjectionTypes.Mercator); Assert.IsNull(multiCreator); }
/// <summary> /// Processes the input equirectangular dataset. /// </summary> /// <param name="inputGrid"> /// Input image path. /// </param> /// <param name="outputDir"> /// Output directory where pyramid is generated. /// </param> /// <param name="projection"> /// Projection type. /// </param> private static void ProcessEquirectangularGrid(string inputGrid, string outputDir, ProjectionTypes projection) { Trace.TraceInformation("{0}: Reading dataset..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture)); ImageFormat imageFormat = ImageFormat.Png; // Read and parse glacier bay dataset. // Define a color map with relief shading implemented. var datagridDetails = DataGridHelper.LoadFromFile(inputGrid); // Build a data grid using the input data set var dataGrid = new DataGrid(datagridDetails.Data, false); // Build the grid map for equirectangular projection using the data grid and boundary co-ordinates var equirectangularGridMap = new EquirectangularGridMap(dataGrid, datagridDetails.Boundary); // Build the color map using equirectangular projection grid map var dataColorMap = new ShadedReliefColorMap(equirectangularGridMap); var maximumLevelsOfDetail = 15; // Define an instance of ITileCreator to create image tiles. ITileCreator imageTileCreator = TileCreatorFactory.CreateImageTileCreator(dataColorMap, projection, outputDir); // Define an instance of ITileCreator to create DEM tiles. // Define serialization mechanism for storing and retrieving DEM tiles. ITileCreator demTileCreator = TileCreatorFactory.CreateDemTileCreator(dataColorMap, projection, outputDir); // MultiTile creator encapsulates image and DEM tile creators. var multiTileCreator = new MultiTileCreator(new Collection<ITileCreator>() { imageTileCreator, demTileCreator }, projection); // Define boundary for the region. var boundary = new Boundary(datagridDetails.Boundary.Left, datagridDetails.Boundary.Top, datagridDetails.Boundary.Right, datagridDetails.Boundary.Bottom); if (projection == ProjectionTypes.Toast) { boundary.Left += 180.0; boundary.Right += 180.0; } // Generate base tiles and fill up the pyramid. var tileGenerator = new TileGenerator(multiTileCreator); tileGenerator.Generate(maximumLevelsOfDetail, boundary); // Path of Mercator and Toast DEM tile server. const string MercatorDemTilePath = @"http://(web server address)?Q={0},{1},{2},Mercator,dem2178"; const string ToastDemTilePath = @"http://(web server address)?Q={0},{1},{2},Toast,dem1033"; string fileName = Path.GetFileNameWithoutExtension(inputGrid); // Generate Thumbnail Images. Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture)); ImageTileSerializer tileSerializer = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png); string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg"); TileHelper.GenerateThumbnail(tileSerializer.GetFileName(0, 0, 0), 96, 45, thumbnailFile, ImageFormat.Jpeg); // Create and save WTML file. string textureTilePath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString()); var inputBoundary = new Boundary(datagridDetails.Boundary.Left, datagridDetails.Boundary.Top, datagridDetails.Boundary.Right, datagridDetails.Boundary.Bottom); WtmlCollection wtmlCollection = new WtmlCollection(fileName, thumbnailFile, textureTilePath, maximumLevelsOfDetail, projection, inputBoundary); wtmlCollection.ZoomLevel = 0.2; wtmlCollection.IsElevationModel = true; wtmlCollection.DemTilePath = projection == ProjectionTypes.Mercator ? MercatorDemTilePath : ToastDemTilePath; string path = Path.Combine(outputDir, fileName + ".wtml"); wtmlCollection.Save(path); Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture)); }
/// <summary> /// Processes the input equirectangular dataset. /// </summary> /// <param name="inputGrid"> /// Input image path. /// </param> /// <param name="outputDir"> /// Output directory where pyramid is generated. /// </param> /// <param name="projection"> /// Projection type. /// </param> private static void ProcessEquirectangularGrid(string inputGrid, string outputDir, ProjectionTypes projection) { Trace.TraceInformation("{0}: Reading dataset..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture)); ImageFormat imageFormat = ImageFormat.Png; // Read and parse glacier bay dataset. // Define a color map with relief shading implemented. var datagridDetails = DataGridHelper.LoadFromFile(inputGrid); // Build a data grid using the input data set var dataGrid = new DataGrid(datagridDetails.Data, false); // Build the grid map for equirectangular projection using the data grid and boundary co-ordinates var equirectangularGridMap = new EquirectangularGridMap(dataGrid, datagridDetails.Boundary); // Build the color map using equirectangular projection grid map var dataColorMap = new ShadedReliefColorMap(equirectangularGridMap); var maximumLevelsOfDetail = 15; // Define an instance of ITileCreator to create image tiles. ITileCreator imageTileCreator = TileCreatorFactory.CreateImageTileCreator(dataColorMap, projection, outputDir); // Define an instance of ITileCreator to create DEM tiles. // Define serialization mechanism for storing and retrieving DEM tiles. ITileCreator demTileCreator = TileCreatorFactory.CreateDemTileCreator(dataColorMap, projection, outputDir); // MultiTile creator encapsulates image and DEM tile creators. var multiTileCreator = new MultiTileCreator(new Collection <ITileCreator>() { imageTileCreator, demTileCreator }, projection); // Define boundary for the region. var boundary = new Boundary(datagridDetails.Boundary.Left, datagridDetails.Boundary.Top, datagridDetails.Boundary.Right, datagridDetails.Boundary.Bottom); if (projection == ProjectionTypes.Toast) { boundary.Left += 180.0; boundary.Right += 180.0; } // Generate base tiles and fill up the pyramid. var tileGenerator = new TileGenerator(multiTileCreator); tileGenerator.Generate(maximumLevelsOfDetail, boundary); // Path of Mercator and Toast DEM tile server. const string MercatorDemTilePath = @"http://(web server address)?Q={0},{1},{2},Mercator,dem2178"; const string ToastDemTilePath = @"http://(web server address)?Q={0},{1},{2},Toast,dem1033"; string fileName = Path.GetFileNameWithoutExtension(inputGrid); // Generate Thumbnail Images. Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture)); ImageTileSerializer tileSerializer = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png); string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg"); TileHelper.GenerateThumbnail(tileSerializer.GetFileName(0, 0, 0), 96, 45, thumbnailFile, ImageFormat.Jpeg); // Create and save WTML file. string textureTilePath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString()); var inputBoundary = new Boundary(datagridDetails.Boundary.Left, datagridDetails.Boundary.Top, datagridDetails.Boundary.Right, datagridDetails.Boundary.Bottom); WtmlCollection wtmlCollection = new WtmlCollection(fileName, thumbnailFile, textureTilePath, maximumLevelsOfDetail, projection, inputBoundary); wtmlCollection.ZoomLevel = 0.2; wtmlCollection.IsElevationModel = true; wtmlCollection.DemTilePath = projection == ProjectionTypes.Mercator ? MercatorDemTilePath : ToastDemTilePath; string path = Path.Combine(outputDir, fileName + ".wtml"); wtmlCollection.Save(path); Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture)); }