使用GDAL自带函数读取RPC文件的方法

RPC为有理多项式系数(Rational Polynomial Coefficient),在遥感影像预处理中用于影像像素坐标(行列号)与对应同名点物方坐标(经度,纬度,高程)之间的相互计算。RPC文件,顾名思义,就是包含有理多项式系数的文本文件。RPC文件通常有两种格式:一种为图1所示,称为RPC格式的文件,另一种就是图2所示的,称为RPB格式的文件。


使用GDAL自带函数读取RPC文件的方法_第1张图片 图1 RPC文件 使用GDAL自带函数读取RPC文件的方法_第2张图片 图2 RPB文件

 


在程序处理中,需要将RPC/PRB文件中所包含的系数读入到自定义的结构体或者GDAL库中定义的结构体GDALRPCInfo中,才能进行后续的坐标计算等其他处理。GDALRPCInfo结构体定义在gdal.h头文件中:

typedef struct { 
    double      dfLINE_OFF;
    double      dfSAMP_OFF;
    double      dfLAT_OFF;
    double      dfLONG_OFF;
    double      dfHEIGHT_OFF;

    double      dfLINE_SCALE;
    double      dfSAMP_SCALE;
    double      dfLAT_SCALE;
    double      dfLONG_SCALE;
    double      dfHEIGHT_SCALE;

    double      adfLINE_NUM_COEFF[20];
    double      adfLINE_DEN_COEFF[20];
    double      adfSAMP_NUM_COEFF[20];
    double      adfSAMP_DEN_COEFF[20];
    
    double	dfMIN_LONG;
    double      dfMIN_LAT;
    double      dfMAX_LONG;
    double	dfMAX_LAT;

} GDALRPCInfo;

GDAL库中定义了读取RPC/RPB文件的API函数,分别为GDALLoadRPCFile()与GDALLoadRPBFile(),要想成功读取RPC/RPB文件内容,还需要用到GDALExtractRPCInfo()函数。此三个接口函数都定义在gdal.h头文件中:

char CPL_DLL ** CPL_STDCALL GDALLoadRPBFile( const char *pszFilename, 
                                             char **papszSiblingFiles );
char CPL_DLL ** CPL_STDCALL GDALLoadRPCFile( const char *pszFilename, 
                                             char **papszSiblingFiles );
int CPL_DLL CPL_STDCALL GDALExtractRPCInfo( char **, GDALRPCInfo * );

使用GDAL库读取RPC/RPB文件内容,需要分为两步:先使用GDALLoadRPBFile()或 GDALLoadRPCFile()分别从RPB文件或RPC文件中获取含有RPC系数键值对的字符串列表(char **);然后将上一步获取的 char ** 字符串列表 作为GDALExtractRPCInfo()函数的第一个参数,第二个参数传入GDALRPCInfo结构体就可以成功获取RPC信息,此函数返回值为int类型,返回0代表函数运行失败,返回1代表运行成功。

在第一步中,GDALLoadRPBFile()与 GDALLoadRPCFile()函数中,第一个参数传入RPC/RPB的文件名,第二个参数传入NULL即可。需要特别注意的是,如果是RPB文件,需要使用GDALLoadRPBFile()函数,而且RPB文件的后缀必须是 .rpb 或者 .RPB 才行,大小写无所谓,(如 RPBFileName.rpb/.RPB);如果是RPC文件,需要使用GDALLoadRPCFile()函数,此时RPC文件的后缀不能是 .rpc 或者 .RPC 了,必须是 _rpc.txt 或者 _RPC.TXT 才行,大小写无所谓,(如RPCFileName_rpc.txt/_RPC.TXT)。

有关GDALLoadRPBFile()与 GDALLoadRPCFile()函数的源码在GDAL安装包中可以找到,具体路径为 GDAL_Package/gcore/gdal_rpcimdio.cpp文件中,如果编译安装GDAL时,将其编译为GDAL的Debug版本(./configure --enable-debug),在调试程序时就可以进入GDALLoadRPBFile()或者 GDALLoadRPCFile()函数查看其源码。

你可能感兴趣的:(rpc,gdal)