| [363] | 1 | // asigps.cc
 | 
|---|
 | 2 | // Eric Aubourg         CEA/DAPNIA/SPP   aout 1999
 | 
|---|
 | 3 | 
 | 
|---|
| [358] | 4 | #include "asigps.h"
 | 
|---|
 | 5 | #include <fstream.h>
 | 
|---|
| [634] | 6 | #include <stdio.h>
 | 
|---|
| [358] | 7 | 
 | 
|---|
 | 8 | ASIGPS::ASIGPS(string const& filename) {
 | 
|---|
 | 9 |   readFile(filename);
 | 
|---|
 | 10 | }
 | 
|---|
 | 11 | 
 | 
|---|
 | 12 | void ASIGPS::readFile(string const& filename) {
 | 
|---|
 | 13 |   ifstream f(filename.c_str());
 | 
|---|
| [359] | 14 |   double omjd=0;
 | 
|---|
| [358] | 15 |   while (f) {
 | 
|---|
| [426] | 16 |     char line[500];
 | 
|---|
 | 17 |     f.getline(line,500);
 | 
|---|
| [358] | 18 |     if (!f) break;
 | 
|---|
 | 19 |     char*p = line;
 | 
|---|
 | 20 |     double mjd, lat, lon, alt;
 | 
|---|
 | 21 |     if (*p != '3' && *p != '2') continue;
 | 
|---|
 | 22 |     p++;
 | 
|---|
 | 23 |     if (*p != 'D' && *p != 'd') continue;
 | 
|---|
 | 24 |     p+=3;
 | 
|---|
 | 25 |     if (strncmp(p,"99/jul/1",8)) continue;
 | 
|---|
 | 26 |     p+=8;
 | 
|---|
 | 27 |     if (*p == '7') mjd = 1376.5;
 | 
|---|
 | 28 |     else if (*p == '8') mjd = 1377.5;
 | 
|---|
 | 29 |     else continue;
 | 
|---|
 | 30 |     p++;p++;
 | 
|---|
 | 31 |     int h,m,s;
 | 
|---|
 | 32 |     sscanf(p,"%2d:%2d:%2d",&h,&m,&s);
 | 
|---|
 | 33 |     mjd += (h+m/60.+s/3600.)/24.;
 | 
|---|
 | 34 |     p += 9;
 | 
|---|
 | 35 |     if (*p == 'N') s = 1;
 | 
|---|
 | 36 |     else if (*p == 'S') s = -1;
 | 
|---|
 | 37 |     else continue;
 | 
|---|
 | 38 |     p++;
 | 
|---|
 | 39 |     int d,fm;
 | 
|---|
 | 40 |     sscanf(p,"%2d.%2d,%3d",&d,&m,&fm);
 | 
|---|
 | 41 |     lat = s*(d + m/60. + fm/60000.);
 | 
|---|
 | 42 |     p+=10;
 | 
|---|
 | 43 |     if (*p == 'E') s = 1;
 | 
|---|
 | 44 |     else if (*p == 'W') s = -1;
 | 
|---|
 | 45 |     else continue;
 | 
|---|
 | 46 |     p++;
 | 
|---|
 | 47 |     sscanf(p,"%3d.%2d,%3d",&d,&m,&fm);
 | 
|---|
 | 48 |     lon = s*(d + m/60. + fm/60000.);
 | 
|---|
 | 49 |     p+=11;
 | 
|---|
 | 50 |     sscanf(p,"%5d",&d);
 | 
|---|
 | 51 |     alt = d;
 | 
|---|
 | 52 |     p+=5;
 | 
|---|
 | 53 |     if (*p != 'm') continue;
 | 
|---|
| [359] | 54 |     if (mjd < omjd) continue;
 | 
|---|
 | 55 |     omjd = mjd;
 | 
|---|
| [358] | 56 |     AddValue(mjd, lat, lon, alt);
 | 
|---|
 | 57 |   }
 | 
|---|
| [359] | 58 | }
 | 
|---|