zoukankan      html  css  js  c++  java
  • 关于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());
        }
       
    希望对大家有用!
  • 相关阅读:
    如何在IE, Firefox, Opera浏览器中支持页面弹出并回传数据
    访问IIS 6.0 web服务时, 显示service unavailable
    新blog新气象
    jQuery 参考手册 选择器
    如何在博客中添加目录并链接到当前页面中的某个位置?
    Excel中左中右截取及去空格
    jQuery 遍历 slice() 方法
    如何知道一个工作簿中有多少个工作表?
    jQuery 选择器
    邮政编码查询网址
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6314061.html
Copyright © 2011-2022 走看看