GDAL:函数GDALDataset::RasterIO说明
来源:互联网 发布:天下3妖孽男捏脸数据 编辑:程序博客网 时间:2024/06/06 13:12
部分内容摘自:http://blog.csdn.net/liminlu0314/article/details/7072224
在使用GDAL库函数RasterIO后,产生很多疑惑,也看过李大神关于此函数的博客(见上网页),但是对该函数最后几个参数的描述还不够细致,自己理解总是不够,所以想在此基础上再补充一些内容,希望以后忘记时能够查找。关于GDALRasterBand::RasterIO与GDALDataset::RasterIO,前者李大神已经介绍的很详细,不再赘述。本文主要介绍GDALDataset::RasterIO的后面几个参数具体是何含义,如何使用(来自http://gdal.org/classGDALDataset.html#ad2a643880bf8b3c492783e1ab5fbc667)。
CPLErr GDALDataset::RasterIO(GDALRWFlag eRWFlag,int nXOff,int nYOff,int nXSize,int nYSize,void * pData,int nBufXSize,int nBufYSize,GDALDataType eBufType,int nBandCount,int * panBandMap,GSpacing nPixelSpace,GSpacing nLineSpace,GSpacing nBandSpace,GDALRasterIOExtraArg * psExtraArg )
前九个参数的意义与GDALRasterBand::RasterIO一样,第十个参数nBandCount表示读取的波段的个数,第十一个参数panBandMap表示读取波段的序号。一个栅格数据集往往包含多个波段,如TM包含7个波段(编号为1~7),若想按4,3,2顺序读取该三个波段,需先定义int panBandMap[3]={4,3,2};即可。
int panBandMap[3]= {4,3,2}; unsigned char *data = new unsigned char[Width*Height*3]; poDataset->RasterIO(GF_Read, 0, 0, Width,Height, data,Width,Height, GDT_Byte, 3, panBandMap,0,0,0);nPixelSpace,nLineSpace与nBandSpace是何意义上面博客也讲得很仔细,但一直以来我都很模糊,不知道具体怎么用。其实默认设置下(即后四位参数均为0的情况下)pData存储或读取像元的顺序为先从左到右,从上到下的读取第一波段,再按该顺序读取第二波段以此类推。加入要读取一幅RGB的图像,读取到pData的顺序即为R(S(0,0),S(0,1),S(0,2),...,S(1,0),S(1,2),S(1,3),...,S(width-1,height-2),S(width-1,height-1))(S为当前图像行列坐标下的值,类似于遥感图像的格式,共有width*height个元素)、G(S(0,0),S(0,1),...,S(width-1,height-1))、B(S(0,0),S(0,1),...,S(width-1,height-1))。但是有时我们可能需要其他的排列方式,要设置这些方式,一般就想写个循环完事,其实通过设置上面三个参数也能实现。如要想将JPG图像按照RGBRGBRGB……(这里的RGB仅代表一个像素,一共有width*height对RGB),首先看到R像素与下一个R元素隔了3个像素,因此nPixelSpace的值为sizeof(DataType)*3;第一行与下一行之间隔了原来的两行数据,因此nLineSpace为sizeof(DataType)*width*3;第一波段与下一波段之间的距离即为一个像素,即为sizeof(DataType)。当数据类型DataType为unsigned char 时,sizeof(unsigned char)为1,sizeof(unsigned short)为2,意味着也可以用具体数值表示。
int dim=poDataset->GetRasterCount(); int width=poDataset->GetRasterXSize(); int height=poDataset->GetRasterYSize(); unsigned short *data=new unsigned short [height*width*dim]; poDataset->RasterIO(GF_Read,0,0,width,height,data,width,height,GDT_UInt16,dim,0, dim*sizeof(unsigned short),dim*width*sizeof(unsigned short),sizeof(unsigned short));
0 0
- GDAL:函数GDALDataset::RasterIO说明
- GDAL中GDALDataset::RasterIO分块读取的实现
- GDAL的GDALDataset::GetGeoTransform()函数
- 深入解析GDAL库的RasterIO()函数
- GDAL的RASTERIO
- GDAL的RasterIO使用
- GDAL的RASTERIO
- GDAL的RASTERIO
- GDAL RasterIO使用说明
- GDAL RasterIO使用说明
- GDAL RasterIO读取波段数据
- GDAL源码剖析之RasterIO使用说明
- GDAL源码剖析(七)之GDAL RasterIO使用说明
- GDAL源码剖析(七)之GDAL RasterIO使用说明
- GDAL源码剖析(七)之GDAL RasterIO使用说明
- GDAL源码剖析(七)之GDAL RasterIO使用说明
- rasterio
- GDAL源码剖析(七)之GDAL RasterIO使用说明(续)
- 1.4.3 收集addm报表 2
- 自定义view实现水波纹效果
- easyui linkbutton方法不能正常执行
- 2013成都现场
- 研究生(包括博士)选题与开题报告撰写
- GDAL:函数GDALDataset::RasterIO说明
- oracle中Blob和Clob类型的区别
- struts2 注解例子
- 等待的真相
- C语言实现 一个数二进制位模式从左到右翻转 reverse_bit
- ******************** 宏定义的调试 ********************
- SVN team 合并
- EditText控件的使用
- tcp 三次握手