VS2015 GDAL c++ 开发——栅格读写

栅格处理需要引入的头文件是 gdal_priv.h

读取栅格文件

  1. 打开文件 GDALOpen(文件路径,打开权限)
    权限有 GA_ReadOnly 只读,GA_Update 理解为读写。
    返回对象需要强转为一个GDALDataset 指针。
    GDALDataset * ds = (GDALDataset *)GDALOpen("a.tif",GA_Update);
  2. 打开后对栅格进行操作
    GDALRasterBand * bandn = ds->GetRasterBand(n); 
    n 表示读取第几个波动,这个n是从1开始计数的。
    GDALDataType dataType = pBandR->GetRasterDataType();
    获取波段的类型,有以下几种:
    GDT_Byte、GDT_CFloat32、GDT_CFloat64、
    GDT_CInt16、GDT_CInt32、GDT_Float32、
    GDT_Float64、GDT_Int16、GDT_Int32、
    GDT_UInt16、GDT_UInt32、GDT_Unknown,
    我没理解Cint 和 int Cfloat 和 float 区别何在,就且认为是一样的就好了。
    这里说一句比较重要的话,在win10x64系统中,
    GDT_CInt16/GDT_Int16 我发现等同于 short int,
    GDT_CInt32/GDT_Int32 等同于 int,
    带u的等同为unsigned。
     
    bandn->RasterIO(flag,fx,fy,w,h,buf,bw,bh,type,xsp,ysp);
    flag表示读 GF_Read 还是写 GF_Write
    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);

     

  3. 创建一个驱动器用来创建栅格文件
    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 即可

  4. 接下来可以设置投影和 transform
    【注】:就 extent 和 transform 的区别,单独个人理解是两者是通用的,extent 记录了栅格数据的上下左右四个数值,transform 记录了栅格的左上角坐标(x,y)和像元大小以(xw,yw)及方向(d1,d2) [x,xw,d1,y,yw,d2]

    ds->SetGeoTransform(transform); 

     

  5. 对栅格进行写入操作,其实这个步骤和上面的 RasterIO 是一样的

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值