The OrbitTools Libraries Track Library
C++ Source Code Example #3 |
|
// // This program illustrates how to use the OrbitTools Track Library // to determine the time periods when satellites in an arbitrary // constellation can be acquired from an earth ground site. // // To demonstrate, the times when a ground site has a clear view of // satellites in the GPS constellation are calculated. // // Copyright © 2014 Michael F. Henry // 2014-06-28 // #include "stdafx.h" #include <fstream> // These header files provide access to the main functionality // of the OrbitTools software libraries. #include "coreLib.h" #include "orbitLib.h" #include "trackLib.h" using namespace Zeptomoby::OrbitTools::Track::Acquire; // Forward declaration of helper function (see below) void PrintInfo(const cSchedule<IEciObject>& sched); int main(int argc, char* argv[]) { // The file "tleGpsOps.txt" contains TLE data for all operational // GPS satellites (31 satellites total). std::ifstream tleFile("tleGpsOps.txt"); // Read all TLEs from the input file, and create a vector of satellites. // Note: "satellite_ptr" is a typedef for "shared_ptr<cSatellite>" vector<satellite_ptr> gpsSats; while (!tleFile.eof()) { string line0; string line1; string line2; getline(tleFile, line0); getline(tleFile, line1); getline(tleFile, line2); cTle tle(line0, line1, line2); auto sat = make_shared<cSatellite>(tle, cWgs84::Instance()); gpsSats.push_back(sat); } // The earth ground site: London, England cSite site = cSite(51.507222, -0.1275, 10.0, cWgs84::Instance()); // The time period of interest cJulian t1 = cJulian(2014, 1, 24, 0, 0); // 01/24/2014 00:00 UTC cJulian t2 = cJulian(2014, 1, 24, 23, 59); // 01/24/2014 23:59 UTC // Create an object that will provide acquisition information about // a constellation of satellites over the time period t1..t2 for // the given ground site. cAcquire acqInfo(site, gpsSats, t1, t2); // Show the time periods in which any satellite in the GPS constellation // can be acquired. The returned object is a schedule, whose time periods // contain references to IEciObject objects. In this case, those IEciObject // objects are cSatellite objects. cSchedule<IEciObject> sched = acqInfo.AcquireAny(); printf("ANY Sats\n"); PrintInfo(sched); // Program output: // // ANY Sats // 2014-01-24 00:00:00 2014-01-24 00:02:08 : 8 // GPS BIIA-23 (PRN 04) // GPS BIIR-6 (PRN 14) // GPS BIIR-13 (PRN 02) // GPS BIIRM-2 (PRN 31) // GPS BIIRM-3 (PRN 12) // GPS BIIRM-5 (PRN 29) // GPS BIIF-1 (PRN 25) // GPS BIIF-3 (PRN 24) // // 2014-01-24 00:02:09 2014-01-24 00:02:57 : 7 // GPS BIIA-23 (PRN 04) // GPS BIIR-6 (PRN 14) // GPS BIIR-13 (PRN 02) // GPS BIIRM-2 (PRN 31) // GPS BIIRM-3 (PRN 12) // GPS BIIRM-5 (PRN 29) // GPS BIIF-1 (PRN 25) // // 2014-01-24 00:02:58 2014-01-24 00:12:32 : 8 // GPS BIIA-23 (PRN 04) // GPS BIIR-6 (PRN 14) // GPS BIIR-9 (PRN 21) // GPS BIIR-13 (PRN 02) // GPS BIIRM-2 (PRN 31) // GPS BIIRM-3 (PRN 12) // GPS BIIRM-5 (PRN 29) // GPS BIIF-1 (PRN 25) // // ( output truncated... ) // Show the time periods in which the minimum number of satellites in // the GPS constellation can be acquired. sched = acqInfo.AcquireMin(); printf("MIN Sats\n"); PrintInfo(sched); // Program output: // // MIN Sats // 2014-01-24 00:02:09 2014-01-24 00:02:57 : 7 // GPS BIIA-23 (PRN 04) // GPS BIIR-6 (PRN 14) // GPS BIIR-13 (PRN 02) // GPS BIIRM-2 (PRN 31) // GPS BIIRM-3 (PRN 12) // GPS BIIRM-5 (PRN 29) // GPS BIIF-1 (PRN 25) // // 2014-01-24 23:58:01 2014-01-24 23:58:45 : 7 // GPS BIIA-23 (PRN 04) // GPS BIIR-6 (PRN 14) // GPS BIIR-13 (PRN 02) // GPS BIIRM-2 (PRN 31) // GPS BIIRM-3 (PRN 12) // GPS BIIRM-5 (PRN 29) // GPS BIIF-1 (PRN 25) // Show the time periods in which the maximum number of satellites in // the GPS constellation can be acquired. sched = acqInfo.AcquireMax(); printf("MAX Sats\n"); PrintInfo(sched); // Program output: // // MAX Sats // 2014-01-24 05:58:10 2014-01-24 06:19:09 : 17 // GPS BIIA-10 (PRN 32) // GPS BIIA-21 (PRN 09) // GPS BIIA-24 (PRN 06) // GPS BIIA-25 (PRN 03) // GPS BIIA-28 (PRN 08) // GPS BIIR-3 (PRN 11) // GPS BIIR-5 (PRN 28) // GPS BIIR-6 (PRN 14) // GPS BIIR-7 (PRN 18) // GPS BIIR-8 (PRN 16) // GPS BIIR-9 (PRN 21) // GPS BIIR-10 (PRN 22) // GPS BIIR-11 (PRN 19) // GPS BIIRM-4 (PRN 15) // GPS BIIRM-6 (PRN 07) // GPS BIIF-2 (PRN 01) // GPS BIIF-4 (PRN 27) return 0; } // // Helper function to display schedule information // void PrintInfo(const cSchedule<IEciObject>& sched) { // Print information about each period in the given schedule for (const auto& period : sched.Periods()) { // The start/stop time of the period, followed by the number // of content items (cSatellites) associated with the period, i.e., // "2014-01-24 00:00:00 2014-01-24 00:02:08 : 8" printf("%s\n", period->ToString().c_str()); // The "content" of each period. Here the content is an IEciObject // pointer, which points to a cSatellite object. Use the pointer to // print the satellite name. for (auto& sat : period->Content()) { printf(" %s\n", sat->Name().c_str()); } printf("\n"); } } |
|
|