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