VS2015 GDAL c++ 开发——栅格读写
程序员文章站
2022-03-20 13:30:38
...
栅格处理需要引入的头文件是 gdal_priv.h
读取栅格文件
- 打开文件 GDALOpen(文件路径,打开权限)
权限有 GA_ReadOnly 只读,GA_Update 理解为读写。
返回对象需要强转为一个GDALDataset 指针。
GDALDataset * ds = (GDALDataset *)GDALOpen("a.tif",GA_Update); - 打开后对栅格进行操作
n 表示读取第几个波动,这个n是从1开始计数的。GDALRasterBand * bandn = ds->GetRasterBand(n);
GDALDataType dataType = pBandR->GetRasterDataType();
获取波段的类型,有以下几种:
我没理解Cint 和 int Cfloat 和 float 区别何在,就且认为是一样的就好了。GDT_Byte、GDT_CFloat32、GDT_CFloat64、 GDT_CInt16、GDT_CInt32、GDT_Float32、 GDT_Float64、GDT_Int16、GDT_Int32、 GDT_UInt16、GDT_UInt32、GDT_Unknown,
这里说一句比较重要的话,在win10x64系统中,
GDT_CInt16/GDT_Int16 我发现等同于 short int,
GDT_CInt32/GDT_Int32 等同于 int,
带u的等同为unsigned。
flag表示读 GF_Read 还是写 GF_Writebandn->RasterIO(flag,fx,fy,w,h,buf,bw,bh,type,xsp,ysp);
fx,fy,w,h 表示从那个位置开始读,读的横向大小w,纵向大小h
buf 是个指针,表示从读取到该指针中,或从该指针中读取数据写入波段。
bw,bh 指 buf 的缓冲区大小
type 是数据类型,有GDT_Byte ....
xsp,ysp 表示读取的下一列下一行偏移,默认是0,即一个一个挨着读取
如果设置为 xsp=1 ysp=0,表示每隔一列取一次
例如数据(1,2,3,4) 取 (1,3)
获取transform
获取列数和行数double transform[6]; firstDataset->GetGeoTransform(transform);
bandn->GetYSize() bandn->GetXSize()
创建栅格文件
GDALDriver * pDriver = GetGDALDriverManager()->GetDriverByName(format);
-
创建一个驱动器用来创建栅格文件
format 可以是BMP、JPEG、GTiff、HFA、BT、ECW、FITS、GIF
我对此不是很熟悉,就用GTiff 做试验就好了
2.通过驱动器创建栅格文件GDALDataset * ds = pDriver->Create(path,nCol,nRow,bandCount,type,option)
path 是文件路径
nCol nRow bandCount 表示该栅格的长宽和层数
type 是类型有 GDT_Byte ...
option 我不清楚,设置为 NULL 即可 -
接下来可以设置投影和 transform
【注】:就 extent 和 transform 的区别,单独个人理解是两者是通用的,extent 记录了栅格数据的上下左右四个数值,transform 记录了栅格的左上角坐标(x,y)和像元大小以(xw,yw)及方向(d1,d2) [x,xw,d1,y,yw,d2]ds->SetGeoTransform(transform);
-
对栅格进行写入操作,其实这个步骤和上面的 RasterIO 是一样的
上一篇: GDAL读取查询shp数据