ConstellationDefinition ConstellationSet::findCD( const gpstk::DayTime dt ) const throw(NoConstellationFound) { DayTime localDT = dt; localDT.setSecOfDay( (DayTime::SEC_DAY/2) ); // Set to noon to match CDs // Best case (hopefully nominal) is that there is a definition // available for the date in question. CI ci = cdMap.find(localDT); //cout << "Found in map: " << ci->first << endl; if (ci==cdMap.end()) { // If no, first check to see whether date in question is later // than any date available. if (localDT>getLatestDate()) { ConstellationSet::NoConstellationFound exc("All Constellation Definitions Too Early"); GPSTK_THROW(exc); } // If not, start at the day of interest and back up until we // find a definition or hit the earliest definition bool done = false; localDT -= DayTime::SEC_DAY; while (!done && localDT > getEarliestDate() ) { ci = cdMap.find(localDT); if (ci!=cdMap.end()) done = true; localDT -= DayTime::SEC_DAY; } // Did not find one before reaching the "head" of the list if (!done) { ConstellationSet::NoConstellationFound exc("All Constellation Definitions Too Late"); GPSTK_THROW(exc); } } ConstellationDefinition cd = ci->second; return(cd); }
gpstk::DayTime ConstellationSet::parseDate(string date) throw(InvalidDateString) { string whitespace = " \t\r\n"; string::size_type end = date.find_last_not_of(whitespace); string::size_type front = date.find("STATUS"); front = date.find_first_not_of(whitespace, front+6); string dateString = date.substr(front, end-front+1); DayTime dt; try { //cout << dateString << endl; dt.setToString(dateString, "%d %b %Y"); dt.setSecOfDay( (DayTime::SEC_DAY/2) ); return dt; } catch(DayTime::DayTimeException exc) { string s = "Invalid date: '" + dateString + "'"; //cout << s << endl; ConstellationSet::InvalidDateString excids(s); GPSTK_THROW(excids); } }