C# gdal创建和读取tiff文件

本文介绍如何使用GDAL库创建并读取TIFF文件,包括设置地理变换参数、坐标系统及波段数据等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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();

        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Free2140

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

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

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

打赏作者

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

抵扣说明:

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

余额充值