发布时间 : 星期一 文章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对处理的数据存储的代码最好了