rtklibというGNSS解析ソフトウェアがある。
http://www.rtklib.com/
なんとフリーで、オープンソース。
ざっと中身を見ると、APIもかなり充実していて、インターフェースが非常にシンプル。単独測位くらいまでならほとんど自前でコーティングせず作れてしまいそう。すごい。
とりあえずRINEXファイルを表示だけするものを作ってみたので使い方をメモ。
rtklibを使って少しずつGNSS解析の中身を理解していきたい。
(*C1, P2と書いたけど、rinex.cの中で優先順位が決まっているので、きちんと固定するには setrnxcodepriを呼ばなければいけない)
/*
* printobs.c
*
* Created : 2012/07/28
* Author: sako
*/
#include "stdio.h"
#include "stdlib.h"
#include "rtklib.h"
/* copied from postpos.c in rtklib v2.4.1 */
static int nextobsf(const obs_t *obs, int *i, int rcv) {
double tt;
int n;
for (;*in;(*i)++) if (obs->data[*i].rcv==rcv) break;
for (n=0;*i+nn;n++) {
tt=timediff(obs->data[*i+n].time,obs->data[*i].time);
if (obs->data[*i+n].rcv!=rcv||tt>DTTOL) break;
}
return n;
}
int main(int argc, char *argv[]) {
char *rinex_o;
int i, j, nu;
char tmstr[20];
obs_t obs={0};
nav_t nav={0};
sta_t sta[1];
/* parse argument */
if (argc > 1) {
rinex_o = (char *) malloc( strlen(argv[1]) + 1);
strcpy(rinex_o, argv[1]);
}
else {
printf("no input file\n");
return -1;
}
/* read rinex obsfile */
if(readrnx(rinex_o, 0, &obs, &nav, &sta[0]) <= 0) {
printf("Can't read rinex obs file.\n");
}
i = 0;
while(i<obs.n) {
/* seek index of the next epoch */
nu = nextobsf(&obs, &i, 0);
printf("----- epoch start -----\n");
printf("sat num: %d\n", nu);
for(j=i;j<i+nu;j++) {
time2str(obs.data[j].time, tmstr, 0);
printf("%2d: %s %3d %f %f %f %f\n", j-i, tmstr, obs.data[j].sat,
obs.data[j].L[0], obs.data[j].P[0],
obs.data[j].L[1], obs.data[j].P[1]);
}
i += nu;
}
return 0;
}
0 件のコメント:
コメントを投稿