今天在使用GDAL打开大的img文件的时候,(这里所谓的大文件指的是img文件太大,会将数据文件存放到ige格式raw文件中)。在讲img文件和ige文件重命名后,使用GDAL打开文件后,只能读取到文件信息,不能读取图像的数据文件。仔细查看GDAL源代码发现,在img文件中记录了对应的ige文件的名称,重命名后img文件中的记录ige文件名还是原来的,找不到ige文件,所以就打不开了。但是在使用Erdas和ArcGIS打开该文件时,会正常打开,于是查看GDAL代码,修改部分代码,能够使GDAL正常打开。
修改的代码位置如下,gdal源代码目录/frmts/hfa/hfaband.cpp中 367行处的代码修改为下面的:
/* -------------------------------------------------------------------- */ /* Open raw data file. */ /* -------------------------------------------------------------------- */ const char *pszRawFilename = poDMS->GetStringField( "fileName.string" ); const char *pszFullFilename; pszFullFilename = CPLFormFilename( psInfo->pszPath, pszRawFilename, NULL ); if( psInfo->eAccess == HFA_ReadOnly ) fpExternal = VSIFOpenL( pszFullFilename, "rb" ); else fpExternal = VSIFOpenL( pszFullFilename, "r+b" ); if( fpExternal == NULL ) { CPLString strFileName = psInfo->pszFilename; strFileName = strFileName.substr(strFileName.find_last_of('.')+1) + "ige"; pszFullFilename = CPLFormFilename( psInfo->pszPath, strFileName.c_str(), NULL ); if( psInfo->eAccess == HFA_ReadOnly ) fpExternal = VSIFOpenL( pszFullFilename, "rb" ); else fpExternal = VSIFOpenL( pszFullFilename, "r+b" ); if( fpExternal == NULL ) { CPLError( CE_Failure, CPLE_OpenFailed, "Unable to open external data file:/n%s/n", pszFullFilename ); return CE_Failure; } psInfo->pszIGEFilename = const_cast<char*>(strFileName.c_str()); }希望对大家有用!