Пример #1
0
/* read prec ephemeris, sbas data, lex data, tec grid and open rtcm ----------*/
static void readpreceph(char **infile, int n, const prcopt_t *prcopt,
                        nav_t *nav, sbs_t *sbs, lex_t *lex)
{
    seph_t seph0={0};
    int i;
    char *ext;
    
    trace(3,"readpreceph: n=%d\n",n);
    
    nav->ne=nav->nemax=0;
    nav->nc=nav->ncmax=0;
    sbs->n =sbs->nmax =0;
    lex->n =lex->nmax =0;
    
    /* read precise ephemeris files */
    for (i=0;i<n;i++) {
        if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue;
        readsp3(infile[i],nav,0);
    }
    /* read precise clock files */
    for (i=0;i<n;i++) {
        if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue;
        readrnxc(infile[i],nav);
    }
    /* read sbas message files */
    for (i=0;i<n;i++) {
        if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue;
        sbsreadmsg(infile[i],prcopt->sbassatsel,sbs);
    }
    /* read lex message files */
    for (i=0;i<n;i++) {
        if (strstr(infile[i],"%r")||strstr(infile[i],"%b")) continue;
        lexreadmsg(infile[i],0,lex);
    }
    /* allocate sbas ephemeris */
    nav->ns=nav->nsmax=NSATSBS*2;
    if (!(nav->seph=(seph_t *)malloc(sizeof(seph_t)*nav->ns))) {
         showmsg("error : sbas ephem memory allocation");
         trace(1,"error : sbas ephem memory allocation");
         return;
    }
    for (i=0;i<nav->ns;i++) nav->seph[i]=seph0;
    
    /* set rtcm file and initialize rtcm struct */
    rtcm_file[0]=rtcm_path[0]='\0'; fp_rtcm=NULL;
    
    for (i=0;i<n;i++) {
        if ((ext=strrchr(infile[i],'.'))&&
            (!strcmp(ext,".rtcm3")||!strcmp(ext,".RTCM3"))) {
            strcpy(rtcm_file,infile[i]);
            init_rtcm(&rtcm);
            break;
        }
    }
}
Пример #2
0
/* main ----------------------------------------------------------------------*/
int main(int argc, char **argv)
{
    FILE *fp=NULL;
    nav_t nav={0};
    lex_t lex={0};
    gtime_t t0,time;
    double ep0[]={2000,1,1,0,0,0},tspan=24.0,tint=7200,dpos=1;
    double rpos[]={35,137};
    char *ifile="",*ofile="";
    int i,trl=0,index=0,nlat=45,nlon=45;
    
    t0=epoch2time(ep0);
    
    for (i=1;i<argc;i++) {
       if (!strcmp(argv[i],"-t0")&&i+2<argc) {
           if (sscanf(argv[++i],"%lf/%lf/%lf",ep0  ,ep0+1,ep0+2)<3||
               sscanf(argv[++i],"%lf:%lf:%lf",ep0+3,ep0+4,ep0+5)<1) {
               fprintf(stderr,"invalid time\n");
               return -1;
           }
       }
       else if (!strcmp(argv[i],"-ts")&&i+1<argc) tspan=atof(argv[++i]);
       else if (!strcmp(argv[i],"-ti")&&i+1<argc) tint =atof(argv[++i]);
       else if (!strcmp(argv[i],"-u" )&&i+2<argc) {
           rpos[0]=atof(argv[++i]);
           rpos[1]=atof(argv[++i]);
       }
       else if (!strcmp(argv[i],"-n" )&&i+2<argc) {
           nlat=atoi(argv[++i]);
           nlon=atoi(argv[++i]);
       }
       else if (!strcmp(argv[i],"-d" )&&i+1<argc) dpos =atof(argv[++i]);
       else if (!strcmp(argv[i],"-o" )&&i+1<argc) ofile=argv[++i];
       else if (!strcmp(argv[i],"-x" )&&i+1<argc) trl  =atof(argv[++i]);
       else ifile=argv[i];
    }
    if (trl>0) {
       traceopen("diffeph.trace");
       tracelevel(trl);
    }
    t0=epoch2time(ep0);
    
    if (!lexreadmsg(ifile,0,&lex)) {
        fprintf(stderr,"file read error: %s\n",ifile);
        return -1;
    }
    if (!(fp=fopen(ofile,"w"))) {
        fprintf(stderr,"file open error: %s\n",ofile);
        return -1;
    }
    fprintf(fp,"epoch=[%.0f %.0f %.0f %.0f %.0f %.0f];\n",
            ep0[0],ep0[1],ep0[2],ep0[3],ep0[4],ep0[5]);
    
    for (i=0;i<(int)(tspan*3600.0/tint);i++) {
       time=timeadd(t0,tint*i);
       
       fprintf(stderr,"time=%s\r",time_str(time,0));
       
       index=updatelex(index,time,&lex,&nav);
       
       printtec(i+1,time,tint*i,&nav,rpos,nlat,nlon,dpos,fp);
    }
    fclose(fp);
    if (trl>0) traceclose();
    return 0;
}