Skip to content

File GroundStation.hpp

File List > astrea > trace > trace > platforms > ground > GroundStation.hpp

Go to the documentation of this file

#pragma once

#include <string>
#include <vector>

#include <astro/astro.fwd.hpp>
#include <astro/systems/CelestialBody.hpp>
#include <astro/time/Date.hpp>
#include <units/units.hpp>

#include <trace/platforms/ground/GroundPoint.hpp>
#include <trace/platforms/sensors/Sensor.hpp>

namespace astrea {
namespace trace {

class GroundStation : public GroundPoint, public SensorPlatform {
  public:
    GroundStation(
        const astro::CelestialBody* parent,
        const Angle& latitude,
        const Angle& longitude,
        const Distance& altitude                     = 0.0 * mp_units::si::unit_symbols::km,
        const std::string name                       = "Unnammed",
        const std::vector<SensorParameters>& sensors = {}
    );

    ~GroundStation() = default;

    std::size_t get_id() const;

    std::string get_name() const;

    astro::CartesianVector<Distance, astro::frames::earth::icrf> get_inertial_position(const astro::Date& date) const;

    astro::CartesianVector<Velocity, astro::frames::earth::icrf> get_inertial_velocity(const astro::Date& date) const;

  private:
    std::string _name; 
};

} // namespace trace
} // namespace astrea