/****************************************************************************** * egi2ESA.cpp * * ------------------- * * start : June 6th-2006 * * author : Lars Stenseng * * email : stenseng@spacecenter.dk * * last update : June 6th-2006 * ******************************************************************************/ #include #include #include #include using namespace std; /****************************************************************************** * ******************************************************************************/ int main(int argc, char *argv[]) {double FirstObs=604836.0, LastObs=-1.0; int LeapSec; ifstream InputFile; double InputTime, InputLatitude, InputLongitude; ofstream OutputFile; char OutputDays[4], OutputSeconds[4], OutputMicroseconds[4]; char OutputLatitude[4], OutputLongitude[4], OutputHeight[8]; char OutputDummy_8[8]; union{char Days[4]; signed long int InputDays;}; union{char Seconds[4]; unsigned long int InputSeconds;}; union{char Microseconds[4]; unsigned long int InputMicroseconds;}; union{char Latitude[4]; signed long int TempLatitude;}; union{char Longitude[4]; signed long int TempLongitude;}; union{char Height[8]; double InputHeight;}; union{char cDummy_8[8]; double dDummy_8;}; dDummy_8=0.0; if(argc!=5) {cerr << "Convert DNSC egi data to ESA binary attitude data format.\n\n" << "gps2ESA \n" << "\n"; exit(1); } else {InputFile.open(argv[1]); OutputFile.open(argv[2], ios::binary|ios::out); InputDays=atoi(argv[3]); LeapSec=atoi(argv[4]); } while(!InputFile.eof()) {InputFile >> InputTime >> InputLatitude >> InputLongitude >> InputHeight; InputFile.ignore(512,'\n'); InputSeconds=int(fmod(InputTime, 24*3600.0))-LeapSec; InputMicroseconds=int((InputTime-int(InputTime))*1000000.0); TempLatitude=int(InputLatitude*10000000); TempLongitude=int(InputLongitude*10000000); if(InputTime!=0.0) {if(FirstObs > InputTime) FirstObs=InputTime; if(LastObs < InputTime) LastObs=InputTime; for(int i=0; i<4; i++) {OutputDays[i]=Days[3-i]; OutputSeconds[i]=Seconds[3-i]; OutputMicroseconds[i]=Microseconds[3-i]; OutputLatitude[i]=Latitude[3-i]; OutputLongitude[i]=Longitude[3-i]; } for(int i=0; i<8; i++) {OutputHeight[i]=Height[7-i]; OutputDummy_8[i]=cDummy_8[7-i]; } OutputFile.write((char *) OutputDays, 4); // 1 OutputFile.write((char *) OutputSeconds, 4); // 2 OutputFile.write((char *) OutputMicroseconds, 4); // 3 OutputFile.write((char *) OutputLatitude, 4); // 4 OutputFile.write((char *) OutputLongitude, 4); // 5 OutputFile.write((char *) OutputHeight, 8); // 6 OutputFile.write((char *) OutputDummy_8, 8); // 7 OutputFile.write((char *) OutputDummy_8, 8); // 8 OutputFile.write((char *) OutputDummy_8, 8); // 9 OutputFile.write((char *) OutputDummy_8, 8); //10 } } InputFile.close(); OutputFile.close(); cout << setiosflags(ios::fixed) << setw(2) << setprecision(0) << int(fmod((FirstObs-LeapSec)/3600.0, 24.0)) << setw(2) << setprecision(0) << int(fmod((FirstObs-LeapSec)/60.0, 60)) << setw(2) << setprecision(0) << int(fmod((FirstObs-LeapSec), 60)) << '_' << setw(2) << setprecision(0) << int(fmod((LastObs-LeapSec)/3600.0, 24.0)) << setw(2) << setprecision(0) << int(fmod((LastObs-LeapSec)/60.0, 60)) << setw(2) << setprecision(0) << int(fmod((LastObs-LeapSec), 60)) << '\n'; return(0); }