コード例 #1
0
        private async void btnBMLoad_Click(object sender, EventArgs e)
        {
            // Test to create a tile from a world terrain bitmap

            listBox1.Items.Add("Fetching DEM...");
            // class to get digital elevation models(DEM)
            BitmapDEMSource demSrc = new BitmapDEMSource();

            demSrc.Initalize(new MapHeader()
            {
                GridSize = 56
            });

            var elevData = await demSrc.GetDemLL(173, -43, 174, -42); //) mp.GetTerrainTileAsync(x,y,z);

            listBox1.Items.Add($"DEM length {elevData.Elev.Length}");

            var pt1 = demSrc.MapProject(-42, 173);
            var pt2 = demSrc.MapProject(-43, 174);

            listBox1.Items.Add($"Bitmap pixels:({pt1.X},{pt1.Y}) - ({pt2.X},{pt2.Y})");


            pt1 = demSrc.MapProject(-83, -180);
            pt2 = demSrc.MapProject(83, 180);
            listBox1.Items.Add($"Bitmap pixels:({pt1.X},{pt1.Y}) - ({pt2.X},{pt2.Y})");

            /*
             * listBox1.Items.Add("Making Mesh...");
             * // This class constructs a cesium quantized mesh from the dem
             * var vertices = new Mesh().MakeFakeMesh(ref elevData);
             *
             * listBox1.Items.Add("Making Tile...");
             * // This class constructs a quantized mesh tile mesh from the original mesh
             * var tile = new Tiler().MakeTile(vertices,
             * new TerrainTileHeader() { MinimumHeight = elevData.MinElevation, MaximumHeight = elevData.MaxElevation },
             * (uint)(elevData.GridSize * elevData.GridSize * 2), elevData.GridSize);
             *
             * listBox1.Items.Add($"Tile Ready. Size:{tile.Length} . Saving to {txtPath.Text}");
             *
             * var ms = new MemoryStream(tile);
             * using (FileStream fs = new FileStream(txtPath.Text, FileMode.Create))
             * using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress, false))
             * {
             * zipStream.Write(ms.ToArray(), 0, ms.ToArray().Length); // .Write(bytes, 0, bytes.Length);
             * }
             */
        }
コード例 #2
0
        private async void button9_Click(object sender, EventArgs e)
        {
            // Make Bitmap Tile
            listBox1.Items.Add("Fetching DEM...");
            // class to get digital elevation models(DEM)
            BitmapDEMSource demSrc = new BitmapDEMSource();

            demSrc.Initalize(new MapHeader()
            {
                GridSize = Int32.Parse(txtTileSize.Text)
            });

            var elevData = await demSrc.GetDemXYZ(501, 190, 8); //) mp.GetTerrainTileAsync(x,y,z);

            listBox1.Items.Add($"DEM length {elevData.Elev.Length}");

            listBox1.Items.Add("Making Mesh...");
            // This class constructs a cesium quantized mesh from the dem
            var vertices = new Mesh().MakeFakeMesh(ref elevData);

            listBox1.Items.Add("Making Tile...");
            // This class constructs a quantized mesh tile mesh from the original mesh
            var tile = new Tiler().MakeTile(vertices,
                                            new TerrainTileHeader()
            {
                MinimumHeight = elevData.MinimumHeight, MaximumHeight = elevData.MaximumHeight
            },
                                            MapUtil.GridSizeToTriangleCount(elevData.GridSize), elevData.GridSize);

            listBox1.Items.Add($"Tile Ready. Size:{tile.Length} . Saving to {txtPath.Text}");

            var ms = new MemoryStream(tile);

            using (FileStream fs = new FileStream(txtPath.Text, FileMode.Create))
                using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress, false))
                {
                    zipStream.Write(ms.ToArray(), 0, ms.ToArray().Length); // .Write(bytes, 0, bytes.Length);
                }
        }
コード例 #3
0
        public async Task <IActionResult> GetBitmapTile(int x, int y, int z, string formatExtension)
        {
            // todo for now default values. these will be passed in eventually
            var testDataPath = _configuration["TestDataPath"];

            Guid projectId;
            bool isValid = Guid.TryParse(_configuration["DefaultProjectUid"], out projectId);

            if (!isValid)
            {
                return(NotFound()); // todo
            }
            if (z < 1)
            {
                // these two tiles are standard
                // Use tiler to fetch the correct tile
                var basicTile = await new Tiler.Tiler().FetchTile(testDataPath, x, y, z);
                if (basicTile != null)
                {
                    HttpContext.Response.Headers.Add("Content-Encoding", "gzip"); // already compressed on disk
                    //   HttpContext.Response.Headers.Add("Access-Control-Allow-Origin","*"); // already compressed on disk

                    HttpContext.Response.Headers.Add("Content-Length", basicTile.Length.ToString());
                    HttpContext.Response.Headers.Add("Content-Type", "application/octet-stream");
                    HttpContext.Response.Headers.Add("Content-Disposition", $"attachment;filename={y}.terrain");
                    return(File(basicTile, _TerrainDataQM));
                }

                Console.WriteLine($"*** Tile x:{x},y:{y},z:{z} was found ***");
                return(NotFound()); // todo
            }

            // Bitmap tiler
            BitmapDEMSource demSrc   = new BitmapDEMSource();
            var             elevData = await demSrc.GetDemXYZ(x, y, z); // DI injected for single instance

            // This class constructs a cesium quantized mesh from the dem
            var vertices = new Mesh.Mesh().MakeFakeMesh(ref elevData);

            // todo fill in header details
            var tempHeadr = new TerrainTileHeader()
            {
                MaximumHeight          = elevData.MaximumHeight,
                MinimumHeight          = elevData.MinimumHeight,
                CenterX                = elevData.CenterX,
                CenterY                = elevData.CenterY,
                CenterZ                = elevData.CenterZ,
                BoundingSphereCenterX  = elevData.BoundingSphereCenterX,
                BoundingSphereCenterY  = elevData.BoundingSphereCenterY,
                BoundingSphereCenterZ  = elevData.BoundingSphereCenterZ,
                BoundingSphereRadius   = elevData.BoundingSphereRadius,
                HorizonOcclusionPointX = elevData.HorizonOcclusionPointX,
                HorizonOcclusionPointY = elevData.HorizonOcclusionPointY,
                HorizonOcclusionPointZ = elevData.HorizonOcclusionPointZ
            };

            // This class constructs a quantized mesh tile mesh from the original mesh
            var tile = new Tiler.Tiler().MakeTile(vertices, tempHeadr, MapUtil.GridSizeToTriangleCount(elevData.GridSize),
                                                  elevData.GridSize);

            // Debugging code
            string   file = $"c:\\temp\\Test-{x}-{y}-{z}.terrain";
            FileInfo fi   = new FileInfo(file);

            if (!fi.Exists && z == 8 && x == 501)
            {
                var ms = new MemoryStream(tile);
                using (FileStream fs = new FileStream(file, FileMode.Create))
                    using (GZipStream zipStream = new GZipStream(fs, CompressionMode.Compress, false))
                    {
                        zipStream.Write(ms.ToArray(), 0, ms.ToArray().Length); // .Write(bytes, 0, bytes.Length);
                    }
            }

            if (tile != null)
            {
                var compressed = MapUtil.Compress(tile);
                HttpContext.Response.Headers.Add("Content-Encoding", "gzip"); // already compressed on disk
                HttpContext.Response.Headers.Add("Content-Length", compressed.Length.ToString());
                HttpContext.Response.Headers.Add("Content-Type", "application/octet-stream");
                HttpContext.Response.Headers.Add("Content-Disposition", $"attachment;filename={y}.terrain");
                return(File(compressed, _TerrainDataQM));
                // return Ok(MapUtil.Compress(tile));
            }
            else
            {
                return(NotFound());
            }
        }