rtklib学习——读取sp3和clk

readsp3(infile[i],nav,0)和readrnxc(infile[i],nav)

读取sp3文件

对.sp3/.SP3/.eph/.EPH读取,分别对头文件和body部分

头文件:卫星数目ns和卫星系统与prn码,系统类型tsys(M),Base for Pos/Vel(mm or 10**-4 mm/sec)和Base for Clk/Rate(psec or 10**-4 psec/sec)  bfact

#dP2020 12  1  0  0  0.00000000     288   u+U IGb14 FIT  GFZ                    
## 2134 172800.00000000   300.00000000 59184 0.0000000000000                    
+  122   C01C02C03C04C05C06C07C08C09C10C11C12C13C16C19C20C21                    
+        C22C23C24C25C26C27C28C29C30C32C33C34C35C36C37C38C39                    
+        C40C41C42C43C44C45C46C60E01E02E03E04E05E07E08E09E11                    
+        E12E13E14E15E18E19E21E24E25E26E27E30E31E33E36G01G02                    
+        G03G04G05G06G07G08G09G10G11G12G13G14G15G16G17G18G19                    
+        G20G21G22G23G24G25G26G27G28G29G30G31G32J01J02J03J07                    
+        R01R02R03R04R05R07R08R09R12R13R14R15R16R17R18R19R20                    
+        R21R22R24 00 00 00 00 00 00 00 00 00 00 00 00 00 00                    

精密星历储存的结构体

typedef struct {        /* precise ephemeris type */
    gtime_t time;       /* time (GPST) */
    int index;          /* ephemeris index for multiple files */
    double pos[MAXSAT][4]; /* satellite position/clock (ecef) (m|s) */
    float  std[MAXSAT][4]; /* satellite position/clock std (m|s) */
    double vel[MAXSAT][4]; /* satellite velocity/clk-rate (m/s|s/s) */
    float  vst[MAXSAT][4]; /* satellite velocity/clk-rate std (m/s|s/s) */
    float  cov[MAXSAT][3]; /* satellite position covariance (m^2) */
    float  vco[MAXSAT][3]; /* satellite velocity covariance (m^2) */
} peph_t;

分别储存在特定的位置,注意xyz的单位,需要10的3次方

读取clk文件

头文件读取:

     3.00           C                                       RINEX VERSION / TYPE
EPOS-8              GFZ                 20201202 092331 LCL PGM / RUN BY / DATE
     2    AS    AR                                          # / TYPES OF DATA
GFZ  GeoForschungsZentrum Potsdam                           ANALYSIS CENTER
     1                                                      # OF CLK REF
brst 10004M004                                              ANALYSIS CLK REF
Clocks are re-aligned to broadcast GPS time                 COMMENT
    97    IGb14                                             # OF SOLN STA / TRF

body读取:

body部分储存的结构体

typedef struct {        /* precise clock type */
    gtime_t time;       /* time (GPST) */
    int index;          /* clock index for multiple files */
    double clk[MAXSAT][1]; /* satellite clock (s) */
    float  std[MAXSAT][1]; /* satellite clock std (s) */
} pclk_t;

只读取这块

核心代码段

    while (fgets(buff,sizeof(buff),fp)) {
        
        if (str2time(buff,8,26,&time)) {
            trace(2,"rinex clk invalid epoch: %34.34s\n",buff);
            continue;
        }
        strncpy(satid,buff+3,4);
        
        /* only read AS (satellite clock) record */
        if (strncmp(buff,"AS",2)||!(sat=satid2no(satid))) continue;
        
        if (!(satsys(sat,NULL)&mask)) continue;
        
        for (i=0,j=40;i<2;i++,j+=20) data[i]=str2num(buff,j,19);
        
        if (nav->nc>=nav->ncmax) {
            nav->ncmax+=1024;
            if (!(nav_pclk=(pclk_t *)realloc(nav->pclk,sizeof(pclk_t)*(nav->ncmax)))) {
                trace(1,"readrnxclk malloc error: nmax=%d\n",nav->ncmax);
                free(nav->pclk); nav->pclk=NULL; nav->nc=nav->ncmax=0;
                return -1;
            }
            nav->pclk=nav_pclk;
        }
        if (nav->nc<=0||fabs(timediff(time,nav->pclk[nav->nc-1].time))>1E-9) {
            nav->nc++;
            nav->pclk[nav->nc-1].time =time;
            nav->pclk[nav->nc-1].index=index;
            for (i=0;i<MAXSAT;i++) {
                nav->pclk[nav->nc-1].clk[i][0]=0.0;
                nav->pclk[nav->nc-1].std[i][0]=0.0f;
            }
        }
        nav->pclk[nav->nc-1].clk[sat-1][0]=data[0];
        nav->pclk[nav->nc-1].std[sat-1][0]=(float)data[1];
    }

需要注意:只读取了卫星钟差。

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值