Example #1
0
        public void CreateMultipleDemPlatesFromPyramidsTest()
        {
            int    levels         = 5;
            string testFolderName = Path.Combine(TestDataPath, "CreateMultipleDemPlatesFromPyramidsTest", "TestDemMultiplePlateFolder");

            MockClasses.MockMultipleDemTileLocator tileLocator = new MockClasses.MockMultipleDemTileLocator();

            MultipleDemPlateFileGenerator target = new MultipleDemPlateFileGenerator(testFolderName, levels);

            target.CreateFromDemTile(tileLocator);

            WtmlCollection collection = new WtmlCollection("test", "Test.jpeg", "testtexture", levels, ProjectionTypes.Mercator);

            collection.Save(Path.Combine(TestDataPath, "CreateMultipleDemPlatesFromPyramidsTest", "CreateMultipleDemPlatesFromPyramidsTest.wtml"));

            Assert.IsTrue(Directory.Exists(testFolderName));
            Assert.IsTrue(File.Exists(Path.Combine(testFolderName, "DL0X0Y0.plate")));

            Assert.IsTrue(Directory.Exists(Path.Combine(testFolderName, "2")));
            Assert.AreEqual(16, Directory.GetFiles(Path.Combine(testFolderName, "2"), "*.plate").Length);

            ValidatePyramid(testFolderName, tileLocator, 0, 0, 0);
            ValidatePyramid(testFolderName, tileLocator, 2, 0, 0);
            ValidatePyramid(testFolderName, tileLocator, 3, 1, 1);
            ValidatePyramid(testFolderName, tileLocator, 5, 6, 6);
        }
Example #2
0
        public void GetWtmlTextureTilePathEmptyExtensionTest()
        {
            string textureTilePath = @"Pyramid\{0}\{1}\L{0}X{1}Y{2}.{3}";
            string extension       = string.Empty;
            string path            = WtmlCollection.GetWtmlTextureTilePath(textureTilePath, extension);

            Assert.AreEqual(@"Pyramid\{1}\{2}\L{1}X{2}Y{3}.png", path);
        }
Example #3
0
        public void GetWtmlTextureTilePathInvalidTest()
        {
            string textureTilePath = string.Empty;
            string extension       = "png";
            string path            = WtmlCollection.GetWtmlTextureTilePath(textureTilePath, extension);

            Assert.AreEqual(string.Empty, path);
        }
Example #4
0
        /// <summary>
        /// Processes the input equirectangular image.
        /// </summary>
        /// <param name="inputImage">
        /// Input image path.
        /// </param>
        /// <param name="outputDir">
        /// Output directory where pyramid is generated.
        /// </param>
        /// <param name="projection">
        /// Projection type.
        /// </param>
        private static void ProcessEquirectangularImage(string inputImage, string outputDir, ProjectionTypes projection)
        {
            Trace.TraceInformation("{0}: Reading image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageFormat imageFormat = ImageFormat.Png;

            // Set the grid boundaries
            var imageBoundary = new Boundary(-180, -90, 180, 90);

            // Build an image grid using the input image
            var imageGrid = new ImageGrid(inputImage, true);

            // Build the grid map for equirectangular projection using the image grid and boundary co-ordinates
            var equirectangularGridMap = new EquirectangularGridMap(imageGrid, imageBoundary);

            // Build the color map using equirectangular projection grid map
            var imageColorMap = new ImageColorMap(equirectangularGridMap);

            var maximumLevelsOfDetail = TileHelper.CalculateMaximumLevel(imageGrid.Height, imageGrid.Width, imageBoundary);

            // Define ITileCreator instance for creating image tiles.
            ITileCreator tileCreator = TileCreatorFactory.CreateImageTileCreator(imageColorMap, projection, outputDir);

            // Define plumbing for looping through all the tiles to be created for base image and pyramid.
            var tileGenerator = new TileGenerator(tileCreator);

            // Start building base image and the pyramid.
            Trace.TraceInformation("{0}: Building base and parent levels...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            tileGenerator.Generate(maximumLevelsOfDetail);

            string fileName = Path.GetFileNameWithoutExtension(inputImage);

            // Generate Plate file.
            Trace.TraceInformation("{0}: Building Plate file...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageTileSerializer pyramid        = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            PlateFileGenerator  plateGenerator = new PlateFileGenerator(
                Path.Combine(outputDir, fileName + ".plate"),
                maximumLevelsOfDetail,
                ImageFormat.Png);

            plateGenerator.CreateFromImageTile(pyramid);

            // Generate Thumbnail Images.
            Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(inputImage, 96, 45, thumbnailFile, ImageFormat.Jpeg);

            // Get the path of image tiles created and save it in WTML file.
            Trace.TraceInformation("{0}: Building WTML file..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string pyramidPath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString());

            // Create and save WTML collection file.
            WtmlCollection wtmlCollection = new WtmlCollection(fileName, thumbnailFile, pyramidPath, maximumLevelsOfDetail, projection);
            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));
        }
Example #5
0
        public void ValidateWtmlToastCollectionSet()
        {
            WtmlCollection wtmlCollecn = new WtmlCollection("Temp", "tempName.jpeg", Environment.CurrentDirectory, 7, ProjectionTypes.Toast);

            Assert.IsNotNull(wtmlCollecn);

            // Save WTMl file
            string filePath = @"ValidTemp.wtml";

            wtmlCollecn.Save(filePath);
            Assert.IsTrue(File.Exists(filePath));
        }
Example #6
0
        public void ToastSaveTest()
        {
            WtmlCollection wtmlCollection = new WtmlCollection("Sample", "tempName.jpeg", @"D:\Temp", 10, ProjectionTypes.Toast);

            Assert.IsNotNull(wtmlCollection);

            string filePath = @"Temp\temp.wtml";

            wtmlCollection.Save(filePath);
            Assert.IsTrue(File.Exists(filePath));
            XDocument wtmlDoc = XDocument.Load(filePath);

            Assert.AreEqual("Folder", wtmlDoc.Root.Name.ToString(), true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Sample", wtmlDoc.Root.FirstAttribute.Value, true, CultureInfo.InvariantCulture);

            XElement placeNode = wtmlDoc.Root.FirstNode as XElement;

            Assert.AreEqual("Sample", placeNode.Attributes("Name").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Earth", placeNode.Attributes("DataSetType").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", placeNode.Attributes("ZoomLevel").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", placeNode.Attributes("Lat").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", placeNode.Attributes("Lng").Single().Value, true, CultureInfo.InvariantCulture);

            XElement imageSetParentNode = placeNode.FirstNode as XElement;

            XElement firstNode = imageSetParentNode.FirstNode as XElement;

            Assert.AreEqual("ImageSet", firstNode.Name.ToString(), true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("Generic").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Earth", firstNode.Attributes("DataSetType").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Visible", firstNode.Attributes("BandPass").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Sample", firstNode.Attributes("Name").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("BaseTileLevel").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("10", firstNode.Attributes("TileLevels").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("90", firstNode.Attributes("BaseDegreesPerTile").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual(".png", firstNode.Attributes("FileType").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("BottomsUp").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Toast", firstNode.Attributes("Projection").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual(string.Empty, firstNode.Attributes("QuadTreeMap").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("CenterX").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("CenterY").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("OffsetX").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("OffsetY").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("Rotation").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("Sparse").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual(@"D:\Temp", firstNode.Attributes("Url").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("ElevationModel").Single().Value, true, CultureInfo.InvariantCulture);

            XElement thumbnailUrlNode = firstNode.FirstNode as XElement;

            Assert.AreEqual("ThumbnailUrl", thumbnailUrlNode.Name.ToString(), true, CultureInfo.InvariantCulture);
            Assert.AreEqual("tempName.jpeg", thumbnailUrlNode.Value, true, CultureInfo.InvariantCulture);
        }
Example #7
0
        public void MercatorSaveTest()
        {
            WtmlCollection wtmlCollection = new WtmlCollection("Sample", "tempName.jpeg", @"D:\Temp", 10, ProjectionTypes.Mercator);
            Assert.IsNotNull(wtmlCollection);

            string filePath = @"temp.wtml";
            wtmlCollection.Save(filePath);
            Assert.IsTrue(File.Exists(filePath));
            XDocument wtmlDoc = XDocument.Load(filePath);
            Assert.AreEqual("Folder", wtmlDoc.Root.Name.ToString(), true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Sample", wtmlDoc.Root.FirstAttribute.Value, true, CultureInfo.InvariantCulture);

            XElement placeNode = wtmlDoc.Root.FirstNode as XElement;
            Assert.AreEqual("Sample", placeNode.Attributes("Name").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Earth", placeNode.Attributes("DataSetType").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", placeNode.Attributes("ZoomLevel").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", placeNode.Attributes("Lat").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", placeNode.Attributes("Lng").Single().Value, true, CultureInfo.InvariantCulture);

            XElement imageSetParentNode = placeNode.FirstNode as XElement;
            XElement firstNode = imageSetParentNode.FirstNode as XElement;
            Assert.AreEqual("ImageSet", firstNode.Name.ToString(), true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("Generic").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Earth", firstNode.Attributes("DataSetType").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Visible", firstNode.Attributes("BandPass").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Sample", firstNode.Attributes("Name").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("BaseTileLevel").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("10", firstNode.Attributes("TileLevels").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("360", firstNode.Attributes("BaseDegreesPerTile").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual(".png", firstNode.Attributes("FileType").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("BottomsUp").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("Mercator", firstNode.Attributes("Projection").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual(string.Empty, firstNode.Attributes("QuadTreeMap").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("CenterX").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("CenterY").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("OffsetX").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("OffsetY").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("0", firstNode.Attributes("Rotation").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("Sparse").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual(@"D:\Temp", firstNode.Attributes("Url").Single().Value, true, CultureInfo.InvariantCulture);
            Assert.AreEqual("False", firstNode.Attributes("ElevationModel").Single().Value, true, CultureInfo.InvariantCulture);

            XElement thumbnailUrlNode = firstNode.FirstNode as XElement;
            Assert.AreEqual("ThumbnailUrl", thumbnailUrlNode.Name.ToString(), true, CultureInfo.InvariantCulture);
            Assert.AreEqual("tempName.jpeg", thumbnailUrlNode.Value, true, CultureInfo.InvariantCulture);
        }
Example #8
0
        /// <summary>
        /// Processes the input equirectangular dataset.
        /// </summary>
        /// <param name="inputFile">
        /// Input File path.
        /// </param>
        /// <param name="outputDir">
        /// Output directory where pyramid is generated.
        /// </param>
        /// <param name="colorMapPath">
        /// Map of color map file.
        /// </param>
        /// <param name="orientation">
        /// Orientation of color map file.
        /// </param>
        /// <param name="projection">
        /// Projection type.
        /// </param>
        public static void ProcessEquirectangularGrid(string inputFile, string outputDir, string colorMapPath, ColorMapOrientation orientation, ProjectionTypes projection)
        {
            Trace.TraceInformation("{0}: Reading input dataset...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));

            // Get grid details from the input file
            var dataGridDetails = DataGridHelper.LoadFromFile(inputFile);

            // Populate the data grid using grid details
            var dataGrid = new DataGrid(dataGridDetails.Data, true);

            // Build a equirectangular projection grid map using the data grid and boundary details
            var equirectangularGridMap = new EquirectangularGridMap(dataGrid, dataGridDetails.Boundary);

            // Build a color map using equirectangular projection grid map
            var dataColorMap = new DataColorMap(colorMapPath, equirectangularGridMap, orientation, dataGridDetails.MinimumThreshold, dataGridDetails.MaximumThreshold);

            // Define an instance of ITileCreator to create image tiles.
            ITileCreator imageTileCreator = TileCreatorFactory.CreateImageTileCreator(dataColorMap, projection, outputDir);

            Trace.TraceInformation("{0}: Building base and parent levels...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            TileGenerator tileGenerator = new TileGenerator(imageTileCreator);
            int           zoomLevels    = 5;

            tileGenerator.Generate(zoomLevels);

            string fileName = Path.GetFileNameWithoutExtension(inputFile);

            // 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.
            Trace.TraceInformation("{0}: Generating WTML file...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string         textureTilePath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png.ToString());
            WtmlCollection wtmlCollection  = new WtmlCollection(fileName, thumbnailFile, textureTilePath, zoomLevels, projection);

            wtmlCollection.IsElevationModel = false;
            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));
        }
Example #9
0
        /// <summary>
        /// Perform delineation for the specified region.
        /// </summary>
        /// <param name="inputGrid">Input data set.</param>
        /// <param name="outputDir">Output directory where the delineationated image tiles have to be persisted.</param>
        /// <param name="referenceImagePath">Reference image tiles folder path.</param>
        /// <param name="colorMapPath">Color map file path.</param>
        /// <param name="orientation">Color orientation.</param>
        /// <param name="maxLevel">Maximum level of the pyramid.</param>
        private static void DelineateImage(string inputGrid, string outputDir, string referenceImagePath, string colorMapPath, ColorMapOrientation orientation, int maxLevel)
        {
            Trace.TraceInformation("{0}: Starting delineation..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss"));
            Trace.TraceInformation("{0}: Reading dataset..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss"));
            ImageFormat imageFormat = ImageFormat.Png;

            // Read and parse the input dataset.
            var equirectangularGrid = new EquirectangularGrid(inputGrid);

            equirectangularGrid.MaximumLevelsOfDetail = maxLevel;

            // Define a color map to lookup color pixel for double values.
            var colorMap = new EquirectangularColorMap(colorMapPath, equirectangularGrid, orientation);

            // Define serialization mechanism for storing/retrieving reference tiles.
            var referenceTileSerializer = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(referenceImagePath), ImageFormat.Png);

            // Define an instance of ITielCreator to create the tiles.
            var tileSerializer   = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            var imageTileCreator = new MaskedTileCreator(colorMap, tileSerializer, true);

            // Start building the image tiles.
            var tileGenerator = new TileGenerator(imageTileCreator);

            imageTileCreator.ReferenceTileSerializer = referenceTileSerializer;
            tileGenerator.Generate(maxLevel);

            string fileName = Path.GetFileNameWithoutExtension(inputGrid);

            // Generate Thumbnail Images.
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(tileSerializer.GetFileName(0, 0, 0), 96, 45, thumbnailFile);

            // Create and save WTML file.
            string         textureTilePath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString());
            WtmlCollection wtmlCollection  = new WtmlCollection(fileName, thumbnailFile, textureTilePath, equirectangularGrid.MaximumLevelsOfDetail, ProjectionTypes.Toast);
            string         path            = Path.Combine(outputDir, fileName + ".wtml");

            wtmlCollection.Save(path);
            Trace.TraceInformation("{0}: Collection successfully generated.", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss"));
        }
        public void CreateMultipleDemPlatesFromPyramidsTest()
        {
            int levels = 5;
            string testFolderName = Path.Combine(TestDataPath, "CreateMultipleDemPlatesFromPyramidsTest", "TestDemMultiplePlateFolder");
            MockClasses.MockMultipleDemTileLocator tileLocator = new MockClasses.MockMultipleDemTileLocator();

            MultipleDemPlateFileGenerator target = new MultipleDemPlateFileGenerator(testFolderName, levels);
            target.CreateFromDemTile(tileLocator);

            WtmlCollection collection = new WtmlCollection("test", "Test.jpeg", "testtexture", levels, ProjectionTypes.Mercator);
            collection.Save(Path.Combine(TestDataPath, "CreateMultipleDemPlatesFromPyramidsTest", "CreateMultipleDemPlatesFromPyramidsTest.wtml"));

            Assert.IsTrue(Directory.Exists(testFolderName));
            Assert.IsTrue(File.Exists(Path.Combine(testFolderName, "DL0X0Y0.plate")));

            Assert.IsTrue(Directory.Exists(Path.Combine(testFolderName, "2")));
            Assert.AreEqual(16, Directory.GetFiles(Path.Combine(testFolderName, "2"), "*.plate").Length);

            ValidatePyramid(testFolderName, tileLocator, 0, 0, 0);
            ValidatePyramid(testFolderName, tileLocator, 2, 0, 0);
            ValidatePyramid(testFolderName, tileLocator, 3, 1, 1);
            ValidatePyramid(testFolderName, tileLocator, 5, 6, 6);
        }
Example #11
0
        public void ValidateGetTextureForWtmlFile()
        {
            string path = WtmlCollection.GetWtmlTextureTilePath(imageTemplate, "png");

            Assert.AreEqual(@"Pyramid\{1}\{2}\L{1}X{2}Y{3}.png", path);
        }
Example #12
0
        /// <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));
        }
Example #13
0
        /// <summary>
        /// Processes a list of input image tiles and generates pyramid for level N.
        /// </summary>
        /// <param name="inputFilePath">Xml file with list of image tile information.</param>
        /// <param name="outputDir">Output directory where the image tiles of pyramid has to be stored.</param>
        /// <param name="projection">Projection to be used.</param>
        /// <param name="inputBoundary">Input image boundary.</param>
        private static void ProcessMultipartEquirectangularImage(string inputFilePath, string outputDir, ProjectionTypes projection, Boundary inputBoundary)
        {
            ImageFormat imageFormat = ImageFormat.Png;

            Trace.TraceInformation("{0}: Reading image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));

            // Get the list of equirectangular images input.
            string[,] imageTiles = Program.GetInputImageList(inputFilePath);

            // Check if the image is circular.
            double longitudeDelta = inputBoundary.Right - inputBoundary.Left;
            bool   circular       = (360.0 - longitudeDelta) < 0.000001;

            // Build an image grid using the input images
            var imageGrid = new ImageGrid(imageTiles, circular);

            // Build the grid map for equirectangular projection using the image grid and boundary co-ordinates
            var equirectangularGridMap = new EquirectangularGridMap(imageGrid, inputBoundary);

            // Build the color map using equirectangular projection grid map
            var imageColorMap = new ImageColorMap(equirectangularGridMap);

            var maximumLevelsOfDetail = TileHelper.CalculateMaximumLevel(imageGrid.Height, imageGrid.Width, inputBoundary);

            // Define ITileCreator instance for creating image tiles.
            ITileCreator tileCreator = TileCreatorFactory.CreateImageTileCreator(imageColorMap, projection, outputDir);

            // Define bounds of the image. Image is assumed to cover the entire world.
            // If not, change the coordinates accordingly.
            // For Mercator projection, longitude spans from -180 to +180 and latitude from 90 to -90.
            Boundary gridBoundary = new Boundary(inputBoundary.Left, inputBoundary.Top, inputBoundary.Right, inputBoundary.Bottom);

            if (projection == ProjectionTypes.Toast)
            {
                // For Toast projection, longitude spans from 0 to +360 and latitude from 90 to -90.
                gridBoundary.Left  += 180;
                gridBoundary.Right += 180;
            }

            // Define plumbing for looping through all the tiles to be created for base image and pyramid.
            var tileGenerator = new TileGenerator(tileCreator);

            // Start building base image and the pyramid.
            Trace.TraceInformation("{0}: Building base and parent levels...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            tileGenerator.Generate(maximumLevelsOfDetail, gridBoundary);

            string fileName = Path.GetFileNameWithoutExtension(inputFilePath);

            // Generate Plate file.
            Trace.TraceInformation("{0}: Building Plate file...", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            ImageTileSerializer pyramid        = new ImageTileSerializer(TileHelper.GetDefaultImageTilePathTemplate(outputDir), ImageFormat.Png);
            PlateFileGenerator  plateGenerator = new PlateFileGenerator(
                Path.Combine(outputDir, fileName + ".plate"),
                maximumLevelsOfDetail,
                ImageFormat.Png);

            plateGenerator.CreateFromImageTile(pyramid);

            // Generate Thumbnail Images.
            Trace.TraceInformation("{0}: Building Thumbnail image..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string thumbnailFile = Path.Combine(outputDir, fileName + ".jpeg");

            TileHelper.GenerateThumbnail(pyramid.GetFileName(0, 0, 0), 96, 45, thumbnailFile, ImageFormat.Jpeg);

            // Get the path of image tiles created and save it in WTML file.
            Trace.TraceInformation("{0}: Building WTML file..", DateTime.Now.TimeOfDay.ToString(@"hh\:mm\:ss", CultureInfo.InvariantCulture));
            string pyramidPath = WtmlCollection.GetWtmlTextureTilePath(TileHelper.GetDefaultImageTilePathTemplate(outputDir), imageFormat.ToString());

            // Create and save WTML collection file.
            WtmlCollection wtmlCollection = new WtmlCollection(fileName, thumbnailFile, pyramidPath, maximumLevelsOfDetail, projection, inputBoundary);
            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));
        }
Example #14
0
 public void InitializeTest()
 {
     WtmlCollection wtmlCollection = new WtmlCollection("Sample", "tempName.jpeg", @"D:\Temp", 10, ProjectionTypes.Mercator);
     Assert.IsNotNull(wtmlCollection);
 }
Example #15
0
        public void InitializeTest()
        {
            WtmlCollection wtmlCollection = new WtmlCollection("Sample", "tempName.jpeg", @"D:\Temp", 10, ProjectionTypes.Mercator);

            Assert.IsNotNull(wtmlCollection);
        }