关于GDAL打开hfa大文件的问题

     今天在使用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());
    }
   
希望对大家有用!
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值