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