本文主要是介绍使用编译版rtklib过程中如何进行main的调试(spp ppp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
使用编译版rtklib过程中如何进行main的调试(spp ppp)
在编译版rtklib的调试过程中,需要在main函数中定义一些参数。
在进行spp(伪距单点定位)的时候,我们通常这样设定相关参数。
// An highlighted blockprcopt_t popt = prcopt_default;solopt_t sopt = solopt_default;filopt_t fopt = { "" };gtime_t ts = { 0 }, te = { 0 };double tint = 0.0;int n = 8;char *infile[] = {{"D:\\data\\2019182\\kat11820.19o"},{"D:\\data\\2019182\\gbm20600.clk"},{"D:\\data\\2019182\\gbm20600.sp3"},{"D:\\data\\2019182\\gbm20601.clk"},{"D:\\data\\2019182\\gbm20601.sp3"},{"D:\\data\\2019182\\gbm20602.clk"},{"D:\\data\\2019182\\gbm20602.sp3"},{"D:\\data\\2019182\\brdm1820.19p"}};char *outfile = { "D:\\data\\2019182\\kat1091820_spp.pos" };#if 1 /* SPP */popt.navsys = SYS_GPS;// GPS+GAL //SYS_ALL;popt.mode = PMODE_SINGLE;popt.sateph = EPHOPT_PREC;popt.elmin = 7 * D2R;popt.ionoopt = IONOOPT_BRDC;popt.ionoopt = IONOOPT_TEC;sopt.posf = SOLF_XYZ;sopt.times = TIMES_GPST;sopt.timef = 1;sopt.timeu = 3;#endifpostpos(ts, te, tint, 0.0, &popt, &sopt, &fopt, infile, n, outfile, "", "");
在进行ppp(精密单点定位的时候,因为需要进行dcb(different code bias)改正、pcv改正等等,需要一些额外的文件 如图所示。
那么,如何在编译版的main中进行设置以达到同rtkpost一样的结算结果呢?
我们从代码出发,rtklib通过postpos.c进行后处理
找到execses函数
/* execute processing session ------------------------------------------------*/
static int execses(gtime_t ts, gtime_t te, double ti, const prcopt_t *popt,const solopt_t *sopt, const filopt_t *fopt, int flag,char **infile, const int *index, int n, char *outfile)
我们便可以找到.blq .erp .dcb等文件的读取方式
以dcb为例,可以看到,代码中先对fopt->dcb是否为空进行判断,如果其为非空,则进行读取,因此我们可以fop为线索,通过vs中的调用层次结果功能进行查找,进而发现调用结构如下pcv如下
发现源头在main,可以直接通过 filopt_t fopt = { “” };进行设置
typedef struct { /* file options type */char satantp[MAXSTRPATH]; /* satellite antenna parameters file */char rcvantp[MAXSTRPATH]; /* receiver antenna parameters file */char stapos [MAXSTRPATH]; /* station positions file */char geoid [MAXSTRPATH]; /* external geoid data file */char iono [MAXSTRPATH]; /* ionosphere data file */char dcb [MAXSTRPATH]; /* dcb data file */char eop [MAXSTRPATH]; /* eop data file */char blq [MAXSTRPATH]; /* ocean tide loading blq file */char tempdir[MAXSTRPATH]; /* ftp/http temporaly directory */char geexe [MAXSTRPATH]; /* google earth exec file */char solstat[MAXSTRPATH]; /* solution statistics file */char trace [MAXSTRPATH]; /* debug trace file */
} filopt_t;
只需要设置在main中设置好文件路径即可
因此,修改后关于ppp的main函数如下
prcopt_t popt = prcopt_default;solopt_t sopt = solopt_default;filopt_t fopt = { "" };gtime_t ts = { 0 }, te = { 0 };double tint = 0.0;int n = 8;char *infile[] = {{"D:\\data\\2019182\\kat11820.19o"},{"D:\\data\\2019182\\gbm20600.clk"},{"D:\\data\\2019182\\gbm20600.sp3"},{"D:\\data\\2019182\\gbm20601.clk"},{"D:\\data\\2019182\\gbm20601.sp3"},{"D:\\data\\2019182\\gbm20602.clk"},{"D:\\data\\2019182\\gbm20602.sp3"},{"D:\\data\\2019182\\brdm1820.19p"}};char *outfile = { "D:\\data\\2019182\\kat1091820_spp.pos" };popt.navsys = SYS_GPS;// GPS+GAL //SYS_ALL;popt.mode = PMODE_SINGLE;popt.sateph = EPHOPT_PREC;popt.elmin = 7 * D2R;popt.ionoopt = IONOOPT_TEC;popt.tropopt = TROPOPT_ZTD;sopt.posf = SOLF_XYZ;sopt.times = TIMES_GPST;sopt.timef = 1;sopt.timeu = 3;strcpy(fopt.dcb, "D:\A正在处理\RTK数据\2019244\P1C11909.DCB");strcpy(fopt.eop, "D:\A正在处理\RTK数据\2019244\igs20697.erp");strcpy(fopt.blq, "D:\A正在处理\RTK数据\2019244\ocnload.blq");strcpy(fopt.satantp, "D:\A正在处理\RTK数据\2019244\igs14_gbm.atx");strcpy(fopt.rcvantp, "D:\A正在处理\RTK数据\2019244\igs14_gbm.atx");postpos(ts, te, tint, 0.0, &popt, &sopt, &fopt, infile, n, outfile, "", "");
关于调试后的结果对比,下次再写。
这篇关于使用编译版rtklib过程中如何进行main的调试(spp ppp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!