| [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 | } | 
|---|