C# gdal创建和读取tiff文件

TIFF文件在处理格点数据方面,还有是有比较大的优势。

 //定义转换参数
        //这里说明一下,adfGeoTransform中(这里简称GT),
        //GT[0],GT[3] 是做上角坐标,
        //GT[1],GT[5] 是图像总向横向分辨率,就是每个像素代表的长度,
        //GT[2],GT[4] 是旋转相关,一般是0,不用管他。
        //所以,如果我们想知道右下角的坐标,以横坐标为例,右边和左边相隔nXSize个像素,所以相距nXSize* GT[1]的长度,所以横坐标自然是GT[0]+nXSize* GT[1]。
        private readonly double[] d_transform = { 69.999999999999972, 0.01, 0.0, 44.999999999999979, 0.0, -0.01 }; 
        //定义坐标系统
        private readonly string d_project = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]]";

        string tifPath = @"D:\TDDOWNLOAD\Test.tif";//路径
        private void frmMain_Load(object sender, EventArgs e)
        {
            if (File.Exists(tifPath))
                File.Delete(tifPath);
            //列数
            int cols = 240;
            //行数
            int rows = 196;
            //波段数 
            int bandMap = 1;
            int[] buffer = new int[cols * rows];//要保存的value数组 
            ///对buffer[]赋值 ,测试
            for (int i = 0; i < cols * rows; i++)
            {
                buffer[i] = new Random().Next(0, 1);

            }
            //获取gtiff驱动
            Driver drive = Gdal.GetDriverByName("GTiff");
            //创建一个空的dataset
            Dataset dataset = drive.Create(tifPath, cols, rows, bandMap, DataType.GDT_UInt16, new string[] { });
            //影像转换参数
            dataset.SetGeoTransform(d_transform);
            //投影 
            dataset.SetProjection(d_project);

            颜色表  ,
            //ColorTable ct = new ColorTable(PaletteInterp.GPI_RGB); 
            //ColorEntry ce = null;
            //for (short i = 0; i < 255; i++)
            //{
            //    ce = new ColorEntry();

            //    ce.c1 = 1;
            //    ce.c2 = 1;
            //    ce.c3 = 1;
            //    ce.c4 = 1;
            //    ct.SetColorEntry(i, ce);
            //    ce.Dispose();
            //}
            //波段1写入数据
            dataset.GetRasterBand(1).WriteRaster(0, 0, cols, rows, buffer, cols, rows, 0, 0);
            //dataset.GetRasterBand(1).SetColorTable(ct); ///有问题  
            dataset.GetRasterBand(1).FlushCache();
            波段2写入数据
            //dataset.GetRasterBand(2).WriteRaster(0, 0, cols, rows, buffer, cols, rows, 0, 0);
            //dataset.GetRasterBand(2).FlushCache();
            波段3写入数据
            //dataset.GetRasterBand(3).WriteRaster(0, 0, cols, rows, buffer, cols, rows, 0, 0);
            //dataset.GetRasterBand(3).FlushCache();
            //清空缓存
            dataset.FlushCache();
            dataset.Dispose();


        }

        private void btnRead_Click(object sender, EventArgs e)
        {
            //只读的方式打开tiff文件
            Dataset dataset = Gdal.Open(tifPath, Access.GA_ReadOnly);
            ///获取坐标参数
            double[] geoTrans = new double[6];
            dataset.GetGeoTransform(geoTrans);
            ///获取投影信息
            string d_proj = dataset.GetProjection();
            ///获取波段数
            int rasterCount = dataset.RasterCount;
            //获取列数
            int cols = dataset.GetRasterBand(1).XSize;
            //获取行数
            int rows = dataset.GetRasterBand(1).YSize;
            //获取数据类型
            string datatype = dataset.GetRasterBand(1).DataType.ToString();
            dataset.Dispose();

        }
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 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
发出的红包

打赏作者

Free2140

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值