feature/19
Dan Warner 2022-11-13 11:06:08 +00:00
parent ca9d4d97af
commit a729c8a2fb
27 changed files with 187 additions and 82 deletions

View File

@ -24,6 +24,9 @@
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
namespace libsgp4
{
/** /**
* @brief Stores a geodetic location (latitude, longitude, altitude). * @brief Stores a geodetic location (latitude, longitude, altitude).
* *
@ -126,4 +129,6 @@ inline std::ostream& operator<<(std::ostream& strm, const CoordGeodetic& g)
return strm << g.ToString(); return strm << g.ToString();
} }
} // namespace libsgp4
#endif #endif

View File

@ -24,6 +24,9 @@
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
namespace libsgp4
{
/** /**
* @brief Stores a topocentric location (azimuth, elevation, range and range * @brief Stores a topocentric location (azimuth, elevation, range and range
* rate). * rate).
@ -123,4 +126,6 @@ inline std::ostream& operator<<(std::ostream& strm, const CoordTopocentric& t)
return strm << t.ToString(); return strm << t.ToString();
} }
} // namespace libsgp4
#endif #endif

View File

@ -27,6 +27,8 @@
#include "TimeSpan.h" #include "TimeSpan.h"
#include "Util.h" #include "Util.h"
namespace libsgp4
{
namespace namespace
{ {
static int daysInMonth[2][13] = { static int daysInMonth[2][13] = {
@ -702,4 +704,6 @@ inline bool operator<=(const DateTime& dt1, const DateTime& dt2)
return (dt1.Compare(dt2) <= 0); return (dt1.Compare(dt2) <= 0);
} }
} // namespace libsgp4
#endif #endif

View File

@ -24,6 +24,9 @@
#include <stdexcept> #include <stdexcept>
#include <string> #include <string>
namespace libsgp4
{
/** /**
* @brief The exception that the SGP4 class throws when a satellite decays. * @brief The exception that the SGP4 class throws when a satellite decays.
*/ */
@ -74,4 +77,6 @@ private:
Vector _vel; Vector _vel;
}; };
} // namespace libsgp4
#endif #endif

View File

@ -20,6 +20,9 @@
#include "Globals.h" #include "Globals.h"
#include "Util.h" #include "Util.h"
namespace libsgp4
{
/** /**
* Converts a DateTime and Geodetic position to Eci coordinates * Converts a DateTime and Geodetic position to Eci coordinates
* @param[in] dt the date * @param[in] dt the date
@ -104,3 +107,5 @@ CoordGeodetic Eci::ToGeodetic() const
return CoordGeodetic(lat, lon, alt, true); return CoordGeodetic(lat, lon, alt, true);
} }
} // namespace libsgp4

View File

@ -22,6 +22,9 @@
#include "Vector.h" #include "Vector.h"
#include "DateTime.h" #include "DateTime.h"
namespace libsgp4
{
/** /**
* @brief Stores an Earth-centered inertial position for a particular time. * @brief Stores an Earth-centered inertial position for a particular time.
*/ */
@ -141,4 +144,6 @@ private:
Vector m_velocity; Vector m_velocity;
}; };
} // namespace libsgp4
#endif #endif

View File

@ -20,6 +20,9 @@
#include <cmath> #include <cmath>
namespace libsgp4
{
const double kAE = 1.0; const double kAE = 1.0;
const double kQ0 = 120.0; const double kQ0 = 120.0;
const double kS0 = 78.0; const double kS0 = 78.0;
@ -72,5 +75,6 @@ const double kHOURS_PER_DAY = 24.0;
const double kA3OVK2 = -kXJ3 / kCK2 * kAE * kAE * kAE; const double kA3OVK2 = -kXJ3 / kCK2 * kAE * kAE * kAE;
#endif } // namespace libsgp4
#endif

View File

@ -16,9 +16,11 @@
#include "Observer.h" #include "Observer.h"
#include "CoordTopocentric.h" #include "CoordTopocentric.h"
namespace libsgp4
{
/* /*
* calculate lookangle between the observer and the passed in Eci object * calculate lookangle between the observer and the passed in Eci object
*/ */
@ -80,3 +82,5 @@ CoordTopocentric Observer::GetLookAngle(const Eci &eci)
range.w, range.w,
rate); rate);
} }
} // namespace libsgp4

View File

@ -21,6 +21,9 @@
#include "CoordGeodetic.h" #include "CoordGeodetic.h"
#include "Eci.h" #include "Eci.h"
namespace libsgp4
{
class DateTime; class DateTime;
struct CoordTopocentric; struct CoordTopocentric;
@ -98,5 +101,6 @@ private:
Eci m_eci; Eci m_eci;
}; };
#endif } // namespace libsgp4
#endif

View File

@ -19,6 +19,9 @@
#include "Tle.h" #include "Tle.h"
namespace libsgp4
{
OrbitalElements::OrbitalElements(const Tle& tle) OrbitalElements::OrbitalElements(const Tle& tle)
{ {
/* /*
@ -64,3 +67,4 @@ OrbitalElements::OrbitalElements(const Tle& tle)
period_ = kTWOPI / RecoveredMeanMotion(); period_ = kTWOPI / RecoveredMeanMotion();
} }
} // namespace libsgp4

View File

@ -21,6 +21,9 @@
#include "Util.h" #include "Util.h"
#include "DateTime.h" #include "DateTime.h"
namespace libsgp4
{
class Tle; class Tle;
/** /**
@ -142,4 +145,6 @@ private:
DateTime epoch_; DateTime epoch_;
}; };
} // namespace libsgp4
#endif #endif

View File

@ -26,6 +26,9 @@
#include <iomanip> #include <iomanip>
#include <cstring> #include <cstring>
namespace libsgp4
{
void SGP4::SetTle(const Tle& tle) void SGP4::SetTle(const Tle& tle)
{ {
/* /*
@ -1346,3 +1349,5 @@ void SGP4::Reset()
std::memset(&deepspace_consts_, 0, sizeof(deepspace_consts_)); std::memset(&deepspace_consts_, 0, sizeof(deepspace_consts_));
std::memset(&integrator_params_, 0, sizeof(integrator_params_)); std::memset(&integrator_params_, 0, sizeof(integrator_params_));
} }
} // namespace libsgp4

View File

@ -24,6 +24,9 @@
#include "SatelliteException.h" #include "SatelliteException.h"
#include "DecayedException.h" #include "DecayedException.h"
namespace libsgp4
{
/** /**
* @mainpage * @mainpage
* *
@ -255,4 +258,6 @@ private:
bool use_deep_space_; bool use_deep_space_;
}; };
} // namespace libsgp4
#endif #endif

View File

@ -21,6 +21,9 @@
#include <stdexcept> #include <stdexcept>
#include <string> #include <string>
namespace libsgp4
{
/** /**
* @brief The exception that the SGP4 class throws upon an error. * @brief The exception that the SGP4 class throws upon an error.
*/ */
@ -33,4 +36,6 @@ public:
} }
}; };
} // namespace libsgp4
#endif #endif

View File

@ -22,6 +22,9 @@
#include <cmath> #include <cmath>
namespace libsgp4
{
Eci SolarPosition::FindPosition(const DateTime& dt) Eci SolarPosition::FindPosition(const DateTime& dt)
{ {
const double mjd = dt.ToJ2000(); const double mjd = dt.ToJ2000();
@ -61,3 +64,5 @@ double SolarPosition::Delta_ET(double year) const
return 26.465 + 0.747622 * (year - 1950) + 1.886913 return 26.465 + 0.747622 * (year - 1950) + 1.886913
* sin(kTWOPI * (year - 1975) / 33); * sin(kTWOPI * (year - 1975) / 33);
} }
} // namespace libsgp4

View File

@ -21,6 +21,9 @@
#include "DateTime.h" #include "DateTime.h"
#include "Eci.h" #include "Eci.h"
namespace libsgp4
{
/** /**
* @brief Find the position of the sun * @brief Find the position of the sun
*/ */
@ -37,4 +40,6 @@ private:
double Delta_ET(double year) const; double Delta_ET(double year) const;
}; };
} // namespace libsgp4
#endif #endif

View File

@ -24,6 +24,9 @@
#include <cmath> #include <cmath>
#include <stdint.h> #include <stdint.h>
namespace libsgp4
{
namespace namespace
{ {
static const int64_t TicksPerDay = 86400000000LL; static const int64_t TicksPerDay = 86400000000LL;
@ -254,4 +257,6 @@ inline bool operator<=(const TimeSpan& ts1, const TimeSpan& ts2)
return (ts1.Compare(ts2) <= 0); return (ts1.Compare(ts2) <= 0);
} }
} // namespace libsgp4
#endif #endif

View File

@ -19,6 +19,8 @@
#include <locale> #include <locale>
namespace libsgp4
{
namespace namespace
{ {
static const unsigned int TLE1_COL_NORADNUM = 2; static const unsigned int TLE1_COL_NORADNUM = 2;
@ -366,3 +368,5 @@ void Tle::ExtractExponential(const std::string& str, double& val)
throw TleException("Failed to convert value to double"); throw TleException("Failed to convert value to double");
} }
} }
} // namespace libsgp4

View File

@ -22,6 +22,9 @@
#include "DateTime.h" #include "DateTime.h"
#include "TleException.h" #include "TleException.h"
namespace libsgp4
{
/** /**
* @brief Processes a two-line element set used to convey OrbitalElements. * @brief Processes a two-line element set used to convey OrbitalElements.
* *
@ -339,4 +342,6 @@ inline std::ostream& operator<<(std::ostream& strm, const Tle& t)
return strm << t.ToString(); return strm << t.ToString();
} }
} // namespace libsgp4
#endif #endif

View File

@ -21,6 +21,9 @@
#include <stdexcept> #include <stdexcept>
#include <string> #include <string>
namespace libsgp4
{
/** /**
* @brief The exception that the Tle class throws on an error. * @brief The exception that the Tle class throws on an error.
* *
@ -39,4 +42,6 @@ public:
} }
}; };
} // namespace libsgp4
#endif #endif

View File

@ -21,6 +21,8 @@
#include <locale> #include <locale>
#include <functional> #include <functional>
namespace libsgp4
{
namespace Util namespace Util
{ {
namespace namespace
@ -51,4 +53,5 @@ namespace Util
TrimLeft(s); TrimLeft(s);
TrimRight(s); TrimRight(s);
} }
} } // namespace Util
} // namespace libsgp4

View File

@ -22,6 +22,8 @@
#include <sstream> #include <sstream>
namespace libsgp4
{
namespace Util namespace Util
{ {
template template
@ -105,6 +107,8 @@ namespace Util
void TrimLeft(std::string& s); void TrimLeft(std::string& s);
void TrimRight(std::string& s); void TrimRight(std::string& s);
void Trim(std::string& s); void Trim(std::string& s);
}
} // namespace Util
} // namespace libsgp4
#endif #endif

View File

@ -23,6 +23,9 @@
#include <sstream> #include <sstream>
#include <iomanip> #include <iomanip>
namespace libsgp4
{
/** /**
* @brief Generic vector * @brief Generic vector
* *
@ -158,4 +161,6 @@ inline std::ostream& operator<<(std::ostream& strm, const Vector& v)
return strm << v.ToString(); return strm << v.ToString();
} }
} // namespace libsgp4
#endif #endif

View File

@ -27,25 +27,25 @@
struct PassDetails struct PassDetails
{ {
DateTime aos; libsgp4::DateTime aos;
DateTime los; libsgp4::DateTime los;
double max_elevation; double max_elevation;
}; };
double FindMaxElevation( double FindMaxElevation(
const CoordGeodetic& user_geo, const libsgp4::CoordGeodetic& user_geo,
SGP4& sgp4, libsgp4::SGP4& sgp4,
const DateTime& aos, const libsgp4::DateTime& aos,
const DateTime& los) const libsgp4::DateTime& los)
{ {
Observer obs(user_geo); libsgp4::Observer obs(user_geo);
bool running; bool running;
double time_step = (los - aos).TotalSeconds() / 9.0; double time_step = (los - aos).TotalSeconds() / 9.0;
DateTime current_time(aos); //! current time libsgp4::DateTime current_time(aos); //! current time
DateTime time1(aos); //! start time of search period libsgp4::DateTime time1(aos); //! start time of search period
DateTime time2(los); //! end time of search period libsgp4::DateTime time2(los); //! end time of search period
double max_elevation; //! max elevation double max_elevation; //! max elevation
running = true; running = true;
@ -59,8 +59,8 @@ double FindMaxElevation(
/* /*
* find position * find position
*/ */
Eci eci = sgp4.FindPosition(current_time); libsgp4::Eci eci = sgp4.FindPosition(current_time);
CoordTopocentric topo = obs.GetLookAngle(eci); libsgp4::CoordTopocentric topo = obs.GetLookAngle(eci);
if (topo.elevation > max_elevation) if (topo.elevation > max_elevation)
{ {
@ -111,21 +111,21 @@ double FindMaxElevation(
return max_elevation; return max_elevation;
} }
DateTime FindCrossingPoint( libsgp4::DateTime FindCrossingPoint(
const CoordGeodetic& user_geo, const libsgp4::CoordGeodetic& user_geo,
SGP4& sgp4, libsgp4::SGP4& sgp4,
const DateTime& initial_time1, const libsgp4::DateTime& initial_time1,
const DateTime& initial_time2, const libsgp4::DateTime& initial_time2,
bool finding_aos) bool finding_aos)
{ {
Observer obs(user_geo); libsgp4::Observer obs(user_geo);
bool running; bool running;
int cnt; int cnt;
DateTime time1(initial_time1); libsgp4::DateTime time1(initial_time1);
DateTime time2(initial_time2); libsgp4::DateTime time2(initial_time2);
DateTime middle_time; libsgp4::DateTime middle_time;
running = true; running = true;
cnt = 0; cnt = 0;
@ -135,8 +135,8 @@ DateTime FindCrossingPoint(
/* /*
* calculate satellite position * calculate satellite position
*/ */
Eci eci = sgp4.FindPosition(middle_time); libsgp4::Eci eci = sgp4.FindPosition(middle_time);
CoordTopocentric topo = obs.GetLookAngle(eci); libsgp4::CoordTopocentric topo = obs.GetLookAngle(eci);
if (topo.elevation > 0.0) if (topo.elevation > 0.0)
{ {
@ -189,8 +189,8 @@ DateTime FindCrossingPoint(
cnt = 0; cnt = 0;
while (running && cnt++ < 6) while (running && cnt++ < 6)
{ {
Eci eci = sgp4.FindPosition(middle_time); libsgp4::Eci eci = sgp4.FindPosition(middle_time);
CoordTopocentric topo = obs.GetLookAngle(eci); libsgp4::CoordTopocentric topo = obs.GetLookAngle(eci);
if (topo.elevation > 0) if (topo.elevation > 0)
{ {
middle_time = middle_time.AddSeconds(finding_aos ? -1 : 1); middle_time = middle_time.AddSeconds(finding_aos ? -1 : 1);
@ -205,23 +205,23 @@ DateTime FindCrossingPoint(
} }
std::list<struct PassDetails> GeneratePassList( std::list<struct PassDetails> GeneratePassList(
const CoordGeodetic& user_geo, const libsgp4::CoordGeodetic& user_geo,
SGP4& sgp4, libsgp4::SGP4& sgp4,
const DateTime& start_time, const libsgp4::DateTime& start_time,
const DateTime& end_time, const libsgp4::DateTime& end_time,
const int time_step) const int time_step)
{ {
std::list<struct PassDetails> pass_list; std::list<struct PassDetails> pass_list;
Observer obs(user_geo); libsgp4::Observer obs(user_geo);
DateTime aos_time; libsgp4::DateTime aos_time;
DateTime los_time; libsgp4::DateTime los_time;
bool found_aos = false; bool found_aos = false;
DateTime previous_time(start_time); libsgp4::DateTime previous_time(start_time);
DateTime current_time(start_time); libsgp4::DateTime current_time(start_time);
while (current_time < end_time) while (current_time < end_time)
{ {
@ -230,8 +230,8 @@ std::list<struct PassDetails> GeneratePassList(
/* /*
* calculate satellite position * calculate satellite position
*/ */
Eci eci = sgp4.FindPosition(current_time); libsgp4::Eci eci = sgp4.FindPosition(current_time);
CoordTopocentric topo = obs.GetLookAngle(eci); libsgp4::CoordTopocentric topo = obs.GetLookAngle(eci);
if (!found_aos && topo.elevation > 0.0) if (!found_aos && topo.elevation > 0.0)
{ {
@ -301,14 +301,14 @@ std::list<struct PassDetails> GeneratePassList(
/* /*
* at the end of the pass move the time along by 30mins * at the end of the pass move the time along by 30mins
*/ */
current_time = current_time + TimeSpan(0, 30, 0); current_time = current_time + libsgp4::TimeSpan(0, 30, 0);
} }
else else
{ {
/* /*
* move the time along by the time step value * move the time along by the time step value
*/ */
current_time = current_time + TimeSpan(0, 0, time_step); current_time = current_time + libsgp4::TimeSpan(0, 0, time_step);
} }
if (current_time > end_time) if (current_time > end_time)
@ -330,7 +330,6 @@ std::list<struct PassDetails> GeneratePassList(
pd.aos = aos_time; pd.aos = aos_time;
pd.los = end_time; pd.los = end_time;
pd.max_elevation = FindMaxElevation(user_geo, sgp4, aos_time, end_time); pd.max_elevation = FindMaxElevation(user_geo, sgp4, aos_time, end_time);
pass_list.push_back(pd); pass_list.push_back(pd);
} }
@ -339,19 +338,19 @@ std::list<struct PassDetails> GeneratePassList(
int main() int main()
{ {
CoordGeodetic geo(51.507406923983446, -0.12773752212524414, 0.05); libsgp4::CoordGeodetic geo(51.507406923983446, -0.12773752212524414, 0.05);
Tle tle("GALILEO-PFM (GSAT0101) ", libsgp4::Tle tle("GALILEO-PFM (GSAT0101) ",
"1 37846U 11060A 12293.53312491 .00000049 00000-0 00000-0 0 1435", "1 37846U 11060A 12293.53312491 .00000049 00000-0 00000-0 0 1435",
"2 37846 54.7963 119.5777 0000994 319.0618 40.9779 1.70474628 6204"); "2 37846 54.7963 119.5777 0000994 319.0618 40.9779 1.70474628 6204");
SGP4 sgp4(tle); libsgp4::SGP4 sgp4(tle);
std::cout << tle << std::endl; std::cout << tle << std::endl;
/* /*
* generate 7 day schedule * generate 7 day schedule
*/ */
DateTime start_date = DateTime::Now(true); libsgp4::DateTime start_date = libsgp4::DateTime::Now(true);
DateTime end_date(start_date.AddDays(7.0)); libsgp4::DateTime end_date(start_date.AddDays(7.0));
std::list<struct PassDetails> pass_list; std::list<struct PassDetails> pass_list;
@ -378,7 +377,7 @@ int main()
{ {
ss << "AOS: " << itr->aos ss << "AOS: " << itr->aos
<< ", LOS: " << itr->los << ", LOS: " << itr->los
<< ", Max El: " << std::setw(4) << Util::RadiansToDegrees(itr->max_elevation) << ", Max El: " << std::setw(4) << libsgp4::Util::RadiansToDegrees(itr->max_elevation)
<< ", Duration: " << (itr->los - itr->aos) << ", Duration: " << (itr->los - itr->aos)
<< std::endl; << std::endl;
} }

View File

@ -29,10 +29,10 @@
#include <vector> #include <vector>
#include <cstdlib> #include <cstdlib>
void RunTle(Tle tle, double start, double end, double inc) void RunTle(libsgp4::Tle tle, double start, double end, double inc)
{ {
double current = start; double current = start;
SGP4 model(tle); libsgp4::SGP4 model(tle);
bool running = true; bool running = true;
bool first_run = true; bool first_run = true;
@ -42,8 +42,8 @@ void RunTle(Tle tle, double start, double end, double inc)
while (running) while (running)
{ {
bool error = false; bool error = false;
Vector position; libsgp4::Vector position;
Vector velocity; libsgp4::Vector velocity;
double tsince; double tsince;
try try
@ -63,17 +63,17 @@ void RunTle(Tle tle, double start, double end, double inc)
tsince = current; tsince = current;
} }
Eci eci = model.FindPosition(tsince); libsgp4::Eci eci = model.FindPosition(tsince);
position = eci.Position(); position = eci.Position();
velocity = eci.Velocity(); velocity = eci.Velocity();
} }
catch (SatelliteException& e) catch (libsgp4::SatelliteException& e)
{ {
std::cerr << e.what() << std::endl; std::cerr << e.what() << std::endl;
error = true; error = true;
running = false; running = false;
} }
catch (DecayedException& e) catch (libsgp4::DecayedException& e)
{ {
std::cerr << e.what() << std::endl; std::cerr << e.what() << std::endl;
@ -181,7 +181,7 @@ void RunTest(const char* infile)
std::string line; std::string line;
std::getline(file, line); std::getline(file, line);
Util::Trim(line); libsgp4::Util::Trim(line);
/* /*
* skip blank lines or lines starting with # * skip blank lines or lines starting with #
@ -199,7 +199,7 @@ void RunTest(const char* infile)
{ {
try try
{ {
if (line.length() >= Tle::LineLength()) if (line.length() >= libsgp4::Tle::LineLength())
{ {
//Tle::IsValidLine(line.substr(0, Tle::LineLength()), 1); //Tle::IsValidLine(line.substr(0, Tle::LineLength()), 1);
/* /*
@ -209,7 +209,7 @@ void RunTest(const char* infile)
line1 = line; line1 = line;
} }
} }
catch (TleException& e) catch (libsgp4::TleException& e)
{ {
std::cerr << "Error: " << e.what() << std::endl; std::cerr << "Error: " << e.what() << std::endl;
std::cerr << line << std::endl; std::cerr << line << std::endl;
@ -225,15 +225,15 @@ void RunTest(const char* infile)
* split line, first 69 is the second line of the tle * split line, first 69 is the second line of the tle
* the rest is the test parameters, if there is any * the rest is the test parameters, if there is any
*/ */
line2 = line.substr(0, Tle::LineLength()); line2 = line.substr(0, libsgp4::Tle::LineLength());
double start = 0.0; double start = 0.0;
double end = 1440.0; double end = 1440.0;
double inc = 120.0; double inc = 120.0;
if (line.length() > 69) if (line.length() > 69)
{ {
std::vector<std::string> tokens; std::vector<std::string> tokens;
parameters = line.substr(Tle::LineLength() + 1, parameters = line.substr(libsgp4::Tle::LineLength() + 1,
line.length() - Tle::LineLength()); line.length() - libsgp4::Tle::LineLength());
tokenize(parameters, tokens); tokenize(parameters, tokens);
if (tokens.size() >= 3) if (tokens.size() >= 3)
{ {
@ -248,14 +248,14 @@ void RunTest(const char* infile)
*/ */
try try
{ {
if (line.length() >= Tle::LineLength()) if (line.length() >= libsgp4::Tle::LineLength())
{ {
//Tle::IsValidLine(line.substr(0, Tle::LineLength()), 2); //Tle::IsValidLine(line.substr(0, Tle::LineLength()), 2);
Tle tle("Test", line1, line2); libsgp4::Tle tle("Test", line1, line2);
RunTle(tle, start, end, inc); RunTle(tle, start, end, inc);
} }
} }
catch (TleException& e) catch (libsgp4::TleException& e)
{ {
std::cerr << "Error: " << e.what() << std::endl; std::cerr << "Error: " << e.what() << std::endl;
std::cerr << line << std::endl; std::cerr << line << std::endl;

View File

@ -24,29 +24,29 @@
int main() int main()
{ {
Observer obs(51.507406923983446, -0.12773752212524414, 0.05); libsgp4::Observer obs(51.507406923983446, -0.12773752212524414, 0.05);
Tle tle = Tle("UK-DMC 2 ", libsgp4::Tle tle = libsgp4::Tle("UK-DMC 2 ",
"1 35683U 09041C 12289.23158813 .00000484 00000-0 89219-4 0 5863", "1 35683U 09041C 12289.23158813 .00000484 00000-0 89219-4 0 5863",
"2 35683 98.0221 185.3682 0001499 100.5295 259.6088 14.69819587172294"); "2 35683 98.0221 185.3682 0001499 100.5295 259.6088 14.69819587172294");
SGP4 sgp4(tle); libsgp4::SGP4 sgp4(tle);
std::cout << tle << std::endl; std::cout << tle << std::endl;
for (int i = 0; i < 10; ++i) for (int i = 0; i < 10; ++i)
{ {
DateTime dt = tle.Epoch().AddMinutes(i * 10); libsgp4::DateTime dt = tle.Epoch().AddMinutes(i * 10);
/* /*
* calculate satellite position * calculate satellite position
*/ */
Eci eci = sgp4.FindPosition(dt); libsgp4::Eci eci = sgp4.FindPosition(dt);
/* /*
* get look angle for observer to satellite * get look angle for observer to satellite
*/ */
CoordTopocentric topo = obs.GetLookAngle(eci); libsgp4::CoordTopocentric topo = obs.GetLookAngle(eci);
/* /*
* convert satellite position to geodetic coordinates * convert satellite position to geodetic coordinates
*/ */
CoordGeodetic geo = eci.ToGeodetic(); libsgp4::CoordGeodetic geo = eci.ToGeodetic();
std::cout << dt << " " << topo << " " << geo << std::endl; std::cout << dt << " " << topo << " " << geo << std::endl;
}; };