C#基于GDAL的读取tlff文件的高程

            记录一下学习gdal的提取高程功能

Dataset dataset = Gdal.Open(sPathFileName, Access.GA_ReadOnly);

            dataset.GetGeoTransform(geotransform);
            int XSize = dataset.RasterXSize;
            int YSize = dataset.RasterYSize;
            float[,] terrainData = new float[XSize, YSize];
            double nodataValue ;
            int hasval;
            // 获取DEM数据集的高程信息
            Band band = dataset.GetRasterBand(1);
            band.GetNoDataValue(out nodataValue,out hasval);
            double[] lim = new double[2];
            band.ComputeRasterMinMax(lim,0);
           


            int blockSizeX = 1000; // 定义每个块的宽度
            int blockSizeY = 1000; // 定义每个块的高度

            for (int y = 0; y < YSize; y += blockSizeY)
            {
                int blockHeight = Math.Min(blockSizeY, YSize - y); // 计算实际块的高度

                for (int x = 0; x < XSize; x += blockSizeX)
                {
                    int blockWidth = Math.Min(blockSizeX, XSize - x);

                    double[] blockHeights = new double[blockWidth * blockHeight];
                    band.ReadRaster(x, y, blockWidth, blockHeight, blockHeights, blockWidth, blockHeight, 0, 0);

                    for (int blockY = 0; blockY < blockHeight; blockY++)
                    {
                        for (int blockX = 0; blockX < blockWidth; blockX++)
                        {
                            int terrainX = x + blockX;
                            int terrainY = y + blockY;
                            if (terrainX < XSize && terrainY < YSize)
                            {
                                double heightValue = blockHeights[blockY * blockWidth + blockX];
                                // 处理高程数据
                                terrainData[terrainX, terrainY] = (float)heightValue;
                            }
                        }
                    }
                }
            }

其中:

dataset.GetGeoTransform(geoTransform);
返回一个包含6个参数的数组:

geoTransform[0]:左上角像素的X坐标(地理坐标)。
geoTransform[1]:像素宽度(水平分辨率,表示一个像素对应的实际距离)。
geoTransform[2]:旋转参数(通常为0,如果图像是正北向上)。
geoTransform[3]:左上角像素的Y坐标(地理坐标)。
geoTransform[4]:旋转参数(通常为0,如果图像是正北向上)。
geoTransform[5]:像素高度(垂直分辨率,通常为负值)。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
语言的好处及其适用范围 C语言是一种非常流行的编程语言,同时又是一种非常灵活和高效的语言,其应用范围广泛。下面我们就一起来看看使用C语言的好处及其适用范围。 C语言的好处: 1.高效性:C语言是一种非常高效的编程语言,其执行速度比大多数其他编程语言快很多,因此对于需要进行处理大量数据和进行复杂计算的场景非常适合。 2.灵活性:C语言提供了非常多的工具和函数,同时又支持用户自定义函数和数据类型,因此可以让程序员根据自己的需要编写出非常灵活的程序。 3.可移植性:C语言可以在不同的操作系统和硬件平台上运行,因此可以让程序更加通用和适用于不同的计算环境。 4.易于学习:C语言的语法相对简单,模块化和结构化编程风格易于理解,因此入门门槛较低,易于学习。 C语言的适用范围: 1.系统软件开发:C语言由于其高效性和可移植性的特点,其广泛用于系统软件开发中,如操作系统、编译器等。 2.嵌入式系统开发:C语言在嵌入式系统开发中也非常流行,其可以用于编写驱动程序、操作系统、网络协议栈等等。 3.科学计算:C语言的执行速度非常快,其广泛用于科学计算领域,如数值分析、机器学习等等。 4.游戏开发:C语言由于其高效性,非常适合用于游戏开发中,其可以用于编写游戏引擎、游戏物理引擎等。 总之,使用C语言可以带来高效、灵活、可移植等多种好处,其可以应用于不同领域的开发工作中。当然,C语言也有其缺点,如容易出错、内存管理较为复杂等,因此使用C语言的开发人员需要具备一定的编程和操作系统相关知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值