Ejemplo n.º 1
0
        public void Test_FileFormat_GeoTIFF()
        {
            string fileName   = "N043E005_AVE_DSM.tif";
            string sourceFile = Path.Combine("TestData", fileName + ".zip");
            bool   fileOk     = File.Exists(sourceFile);

            Assert.True(fileOk, "TestData is missing");

            if (!File.Exists(fileName))
            {
                ZipFile.ExtractToDirectory(sourceFile, ".", true);
            }

            Assert.True(File.Exists(fileName), "Unzip failed.");

            // Pass the full file name
            fileName = Path.GetFullPath(fileName);
            using (IRasterFile raster = _rasterService.OpenFile(fileName, DEMFileType.GEOTIFF))
            {
                FileMetadata metaData = raster.ParseMetaData(new DEMFileDefinition(DEMFileType.GEOTIFF, DEMFileRegistrationMode.Cell));
                Assert.NotNull(metaData);

                float elevation = raster.GetElevationAtPoint(metaData, 1000, 200);
                Assert.Equal(304f, elevation);

                elevation = raster.GetElevationAtPoint(metaData, 200, 1000);
                Assert.Equal(95f, elevation);
            }
        }
Ejemplo n.º 2
0
        private void PopulateRasterFileDictionary(RasterFileDictionary dictionary, FileMetadata mainTile, IRasterService rasterService, IEnumerable <FileMetadata> fileMetadataList)
        {
            // Add main tile
            if (!dictionary.ContainsKey(mainTile))
            {
                dictionary[mainTile] = rasterService.OpenFile(mainTile.Filename, mainTile.fileFormat);
            }

            foreach (var fileMetadata in fileMetadataList)
            {
                if (!dictionary.ContainsKey(fileMetadata))
                {
                    dictionary[fileMetadata] = rasterService.OpenFile(fileMetadata.Filename, fileMetadata.fileFormat);
                }
            }
        }
Ejemplo n.º 3
0
        public void Test_GLB_Export()
        {
            string fileName   = "N43E005.hgt";
            string sourceFile = Path.Combine("TestData", fileName + ".zip");
            bool   fileOk     = File.Exists(sourceFile);

            Assert.True(fileOk, "TestData is missing");

            if (!File.Exists(fileName))
            {
                ZipFile.ExtractToDirectory(sourceFile, ".", true);
            }


            Assert.True(File.Exists(fileName), "Unzip failed.");

            // Pass the full file name
            fileName = Path.GetFullPath(fileName);
            using (IRasterFile raster = _rasterService.OpenFile(fileName, DEMFileFormat.SRTM_HGT))
            {
                FileMetadata metaData = raster.ParseMetaData();
                Assert.NotNull(metaData);

                string    str2      = "zsq4";
                HeightMap heightMap = _elevationService.GetHeightMap(metaData)
                                      .ReprojectGeodeticToCartesian()
                                      .ZScale(2.5f);

                MeshPrimitive meshPrimitive = _gltfService.GenerateTriangleMesh(heightMap);
                Model         model         = _gltfService.GenerateModel(meshPrimitive, str2);
                _gltfService.Export(model, ".", str2, false, true);
            }
        }
Ejemplo n.º 4
0
        public void Test_GLB_Export()
        {
            string fileName   = "N43E005.hgt";
            string sourceFile = Path.Combine("TestData", fileName + ".zip");
            bool   fileOk     = File.Exists(sourceFile);

            Assert.True(fileOk, "TestData is missing");

            if (!File.Exists(fileName))
            {
                ZipFile.ExtractToDirectory(sourceFile, ".", true);
            }


            Assert.True(File.Exists(fileName), "Unzip failed.");

            // Pass the full file name
            fileName = Path.GetFullPath(fileName);
            using (IRasterFile raster = _rasterService.OpenFile(fileName, DEMFileType.SRTM_HGT))
            {
                FileMetadata metaData = raster.ParseMetaData(new DEMFileDefinition(DEMFileType.SRTM_HGT, DEMFileRegistrationMode.Grid));
                Assert.NotNull(metaData);

                HeightMap heightMap = _elevationService.GetHeightMap(metaData)
                                      .ReprojectGeodeticToCartesian()
                                      .ZScale(2.5f);

                var model = _sharpGltfService.CreateTerrainMesh(heightMap);
                model.SaveGLB("test.glb");
            }
        }
Ejemplo n.º 5
0
        public float GetPointElevation(FileMetadata metadata, double lat, double lon, IInterpolator interpolator = null)
        {
            float heightValue = 0;

            try
            {
                using (IRasterFile raster = _IRasterService.OpenFile(metadata.Filename, metadata.fileFormat))
                {
                    heightValue = GetPointElevation(raster, metadata, lat, lon, interpolator);
                }
            }
            catch (Exception e)
            {
                _logger?.LogError(e, $"Error while getting elevation data : {e.Message}{Environment.NewLine}{e.ToString()}");
            }
            return(heightValue);
        }
Ejemplo n.º 6
0
        void TestEdges(string dataSetName, double lat, double lon
                       , string rasterSouthWestName, string rasterSouthEastName
                       , string rasterNorthWestName, string rasterNorthEastName)
        {
            DEMDataSet dataSet = DEMDataSet.RegisteredDatasets.FirstOrDefault(d => d.Name == dataSetName);

            Assert.NotNull(dataSet);
            DEMFileType fileType   = dataSet.FileFormat.Type;
            int         rasterSize = dataSet.PointsPerDegree;
            double      amountx    = (1d / rasterSize) / 4d;
            double      amounty    = (1d / rasterSize) / 4d;

            // Regenerates all metadata
            //_rasterService.GenerateDirectoryMetadata(dataSet
            //                                        , force: true
            //                                        , deleteOnError: false
            //                                        , maxDegreeOfParallelism: 1);
            _elevationService.DownloadMissingFiles(dataSet, lat, lon);
            var tiles = _rasterService.GenerateReportForLocation(dataSet, lat, lon);

            Assert.True(tiles.Count == 4);
            Assert.Single(tiles, t => string.Equals(Path.GetFileName(t.LocalName), rasterSouthWestName, StringComparison.OrdinalIgnoreCase));
            Assert.Single(tiles, t => string.Equals(Path.GetFileName(t.LocalName), rasterSouthEastName, StringComparison.OrdinalIgnoreCase));
            Assert.Single(tiles, t => string.Equals(Path.GetFileName(t.LocalName), rasterNorthWestName, StringComparison.OrdinalIgnoreCase));
            Assert.Single(tiles, t => string.Equals(Path.GetFileName(t.LocalName), rasterNorthEastName, StringComparison.OrdinalIgnoreCase));

            if (dataSet.FileFormat.Registration == DEMFileRegistrationMode.Cell)
            {
                using (var rasterNW = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterNorthWestName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                    using (var rasterNE = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterNorthEastName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                        using (var rasterSW = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterSouthWestName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                            using (var rasterSE = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterSouthEastName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                            {
                                var elevNW = rasterNW.GetElevationAtPoint(rasterNW.ParseMetaData(dataSet.FileFormat), rasterSize - 1, rasterSize - 1);
                                var elevNE = rasterNE.GetElevationAtPoint(rasterNE.ParseMetaData(dataSet.FileFormat), 0, rasterSize - 1);
                                var elevSW = rasterSW.GetElevationAtPoint(rasterSW.ParseMetaData(dataSet.FileFormat), rasterSize - 1, 0);
                                var elevSE = rasterSE.GetElevationAtPoint(rasterSE.ParseMetaData(dataSet.FileFormat), 0, 0);

                                BilinearInterpolator interpolator = new BilinearInterpolator();
                                var elev0    = interpolator.Interpolate(elevSW, elevSE, elevNW, elevNE, 0.25, 0.25);
                                var apiElev0 = _elevationService.GetPointElevation(lat + amounty, lon - amountx, dataSet);
                                Assert.True((elev0 - apiElev0.Elevation.Value) < double.Epsilon);

                                var elev1    = interpolator.Interpolate(elevSW, elevSE, elevNW, elevNE, 0.75, 0.25);
                                var apiElev1 = _elevationService.GetPointElevation(lat + amounty, lon + amountx, dataSet);
                                Assert.True((elev1 - apiElev1.Elevation.Value) < double.Epsilon);

                                var elev2    = interpolator.Interpolate(elevSW, elevSE, elevNW, elevNE, 0.25, 0.75);
                                var apiElev2 = _elevationService.GetPointElevation(lat - amounty, lon - amountx, dataSet);
                                Assert.True((elev2 - apiElev2.Elevation.Value) < double.Epsilon);

                                var elev3    = interpolator.Interpolate(elevSW, elevSE, elevNW, elevNE, 0.75, 0.75);
                                var apiElev3 = _elevationService.GetPointElevation(lat - amounty, lon + amountx, dataSet);
                                Assert.True((elev3 - apiElev3.Elevation.Value) < double.Epsilon);
                            }
            }
            else
            {
                using (var rasterNW = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterNorthWestName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                    using (var rasterNE = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterNorthEastName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                        using (var rasterSW = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterSouthWestName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                            using (var rasterSE = _rasterService.OpenFile(tiles.First(t => string.Equals(rasterSouthEastName, Path.GetFileName(t.LocalName))).LocalName, fileType))
                            {
                                // Northen row, west to east
                                var elevN0 = rasterNW.GetElevationAtPoint(rasterNW.ParseMetaData(dataSet.FileFormat), rasterSize - 1, rasterSize - 1);
                                var elevN1 = rasterNW.GetElevationAtPoint(rasterNW.ParseMetaData(dataSet.FileFormat), rasterSize, rasterSize - 1);
                                var elevN2 = rasterNE.GetElevationAtPoint(rasterNE.ParseMetaData(dataSet.FileFormat), 1, rasterSize - 1);

                                // middle row, west to east
                                var elevM0 = rasterNW.GetElevationAtPoint(rasterNW.ParseMetaData(dataSet.FileFormat), rasterSize - 1, rasterSize);
                                var elevM1 = rasterNW.GetElevationAtPoint(rasterNW.ParseMetaData(dataSet.FileFormat), rasterSize, rasterSize);
                                var elevM2 = rasterNE.GetElevationAtPoint(rasterNE.ParseMetaData(dataSet.FileFormat), 1, rasterSize);

                                // Sourthen row, west to east
                                var elevS0 = rasterSW.GetElevationAtPoint(rasterSW.ParseMetaData(dataSet.FileFormat), rasterSize - 1, 1);
                                var elevS1 = rasterSW.GetElevationAtPoint(rasterSW.ParseMetaData(dataSet.FileFormat), rasterSize, 1);
                                var elevS2 = rasterSE.GetElevationAtPoint(rasterSE.ParseMetaData(dataSet.FileFormat), 1, 1);

                                BilinearInterpolator interpolator = new BilinearInterpolator();
                                var elev0    = interpolator.Interpolate(elevM0, elevM1, elevN0, elevN1, 0.75, 0.75);
                                var apiElev0 = _elevationService.GetPointElevation(lat + amounty, lon - amountx, dataSet);
                                Assert.True((elev0 - apiElev0.Elevation.Value) < double.Epsilon);

                                var elev1    = interpolator.Interpolate(elevM1, elevM2, elevN1, elevN2, 0.25, 0.75);
                                var apiElev1 = _elevationService.GetPointElevation(lat + amounty, lon + amountx, dataSet);
                                Assert.True((elev1 - apiElev1.Elevation.Value) < double.Epsilon);

                                var elev2    = interpolator.Interpolate(elevS0, elevS1, elevM0, elevM1, 0.75, 0.25);
                                var apiElev2 = _elevationService.GetPointElevation(lat - amounty, lon - amountx, dataSet);
                                Assert.True((elev2 - apiElev2.Elevation.Value) < double.Epsilon);

                                var elev3    = interpolator.Interpolate(elevS1, elevS2, elevM1, elevM2, 0.25, 0.25);
                                var apiElev3 = _elevationService.GetPointElevation(lat - amounty, lon + amountx, dataSet);
                                Assert.True((elev3 - apiElev3.Elevation.Value) < double.Epsilon);
                            }
            }
        }