C++ GDAL开发笔记 联系客服

发布时间 : 星期一 文章C++ GDAL开发笔记更新完毕开始阅读ce624b8eba1aa8114531d93f

李民录.《GDAL原码剖析与开发指南》.p303.(5.1.4 ENVI的HDR格式) 创建说明:

INTERLEAVE=BSQ/BIP/BIL:设置生成的文件数据组织方式,默认为BSQ(按波段存储)、BIP(按像元存储)、BIL(按行存储)。

SUFFIX=REPLACE/ADD:指定对应的HDR文件名称。如果设置为REPLACE,那么生成的HDR文件和数据文件名称一样,扩展名不同,如数据文件名为file.bin,那么生成的HDR文件名称为file.hdr;而设置为ADD时,生成的HDR文件名是在数据文件名后面追加.hdr组成,如文件名称为file.bin,那么生成的HDR文件名称为file.bin.hdr。

李民录.《GDAL原码剖析与开发指南》.p359.(5.1.7 创建文件)

创建文件有两种方法,第一种是调用Create动态创建文件,包含Create函数和用来设置各种信息的函数;第二种是调用CreateCopy()函数,可以从源映像中获取影像信息并写入到结果图像中。

网上解答:

图像读取出错很多情况下都是数据格式用错。

创建格式的时候格式名称设置为ENVI,然后输出的图像就会自动创建hdr文件,不需要单独写hdr了。

直接用GDALOpen打开hdr同名的另外一个实体问题,然后用GetGeoTransform函数就可以获取到参考坐标XStart之类的地理信息了。

import gdal import Numeric

dataset = gdal.Open(\width = dataset.RasterXSize height = dataset.RasterYSize

datas = dataset.ReadAsArray(0,0,width,height) driver = gdal.GetDriverByName(\

tods = driver.Create(\PIXEL\

tods.WriteRaster(0,0,width,height,datas.tostring(),width,height,band_list=[1,2,3])

这是一个很简单的另存遥感图像的方法(不包括空间信息)。这里尤其注意Create函数中的options= [ \参数。没有这个参数,波段像素组织会错。保存出的图像只有横向的1/3。而且彩色完全不对 。

经典C++版创建数据集: GDALAllRegister();

GDALDataset *poDstDS; GDALDriver *poDriver ;

char **papszOptions2 = NULL ; const char *pszFormat = \

poDriver = GetGDALDriverManager()->GetDriverByName(pszFormat);

// ...............此处添加自己的代码,比如设定路径,要建立的文件长度、宽度之类的 CString strFullPath = \int nPicWidth = nBuffersizeX; int nPicHeight = nBuffersizeY;

poDstDS = poDriver->Create( strFullPath, nPicWidth,nPicHeight,3, GDT_Byte, papszOptions2);

// ............此处添加代码,获取数据内容

(poDstDS->GetRasterBand(1))->RasterIO(GF_Write,0,0,nBuffersizeX,nBuffersizeY,pafScanblock[BandChoiceR],nBuffersizeX,nBuffersizeY,GDT_Byte,0,0);

(poDstDS->GetRasterBand(2))->RasterIO(GF_Write,0,0,nBuffersizeX,nBuffersizeY,pafScanblock[BandChoiceG],nBuffersizeX,nBuffersizeY,GDT_Byte,0,0);

(poDstDS->GetRasterBand(3))->RasterIO(GF_Write,0,0,nBuffersizeX,nBuffersizeY,pafScanblock[BandChoiceB],nBuffersizeX,nBuffersizeY,GDT_Byte,0,0);

nBUffersizeX = 512 nBuffersizeY = 512 调试的时候

poDstDS = poDriver->Create( strFullPath, nPicWidth,nPicHeight,3, GDT_Byte, papszOptions2);

居然得到的poDstDS nRasterYSize = 3, nBands = 39491616 eAccess=512 不知道是哪里写错了 还请多指教 要是有GDAL对处理的数据存储的代码最好了