10 changed files with 205 additions and 20 deletions
@ -0,0 +1,128 @@
@@ -0,0 +1,128 @@
|
||||
#ifndef AIRMAP_ADVISORY_H_ |
||||
#define AIRMAP_ADVISORY_H_ |
||||
|
||||
#include <airmap/airspace.h> |
||||
#include <airmap/date_time.h> |
||||
#include <airmap/do_not_copy_or_move.h> |
||||
#include <airmap/error.h> |
||||
#include <airmap/flight_plan.h> |
||||
#include <airmap/geometry.h> |
||||
#include <airmap/optional.h> |
||||
#include <airmap/outcome.h> |
||||
#include <airmap/ruleset.h> |
||||
#include <airmap/status.h> |
||||
|
||||
#include <cstdint> |
||||
#include <functional> |
||||
#include <iosfwd> |
||||
#include <string> |
||||
#include <vector> |
||||
|
||||
namespace airmap { |
||||
|
||||
/// Advisory provides functionality to query airspace and weather information about
|
||||
/// a geographic area.
|
||||
class Advisory : DoNotCopyOrMove { |
||||
public: |
||||
/// Advisory bundles together airspace information and its evaluation in terms
|
||||
/// good to fly/needs information or feedback/conflict.
|
||||
struct AirspaceAdvisory { |
||||
Status::Advisory advisory; /// Airspace information.
|
||||
Status::Color color; /// The evaluation of the airspace.
|
||||
std::string rule_id; /// The id of the ruleset.
|
||||
std::string ruleset_id; /// The id of the rule.
|
||||
}; |
||||
|
||||
/// Wind bundles up attributes describing a wind conditions.
|
||||
struct Wind { |
||||
std::uint32_t heading = 0; ///< The heading in [°].
|
||||
float speed = 0.0; ///< The speed in [°].
|
||||
std::uint32_t gusting = 0; |
||||
}; |
||||
|
||||
/// Weather bundles up attributes describing a weather condition.
|
||||
struct Weather { |
||||
std::string condition; ///< The overall weather condition.
|
||||
std::string icon; ///< The icon or class of icon that should be used for display purposes.
|
||||
Wind wind; ///< The details about the current wind conditions.
|
||||
float temperature = 0.0; ///< The temperature in [°C].
|
||||
float humidity = 0.0; |
||||
float visibility = 0.0; ///< Visibility in [m].
|
||||
float precipitation = 0.0; ///< The probability of precipitation in [%].
|
||||
std::string timezone; ///< The timezone of the weather location.
|
||||
DateTime time; ///< Timestamp of the weather report.
|
||||
float dew_point = 0.0; ///< The current dew point.
|
||||
float mslp = 0.0; ///< The Median Sea Level Pressure in [mbar].
|
||||
}; |
||||
|
||||
/// ForId bundles up types to ease interaction
|
||||
/// with Advisory::for_id.
|
||||
struct ForId { |
||||
/// Parameters bundles up input parameters.
|
||||
struct Parameters { |
||||
Optional<DateTime> start; ///< Search for advisories before this time.
|
||||
Optional<DateTime> end; ///< Search for advisories after this time.
|
||||
FlightPlan::Id id; ///< Search for advisories relating to this flight plan.
|
||||
}; |
||||
/// Result models the outcome of calling Advisory::for_id.
|
||||
using Result = Outcome<std::vector<AirspaceAdvisory>, Error>; |
||||
/// Callback describes the function signature of the callback that is
|
||||
/// invoked when a call to Advisory::for_id finishes.
|
||||
using Callback = std::function<void(const Result&)>; |
||||
}; |
||||
|
||||
/// Search bundles up types to ease interaction
|
||||
/// with Advisory::search.
|
||||
struct Search { |
||||
/// Parameters bundles up input parameters.
|
||||
struct Parameters { |
||||
Required<Geometry> geometry; ///< Evaluate rulesets intersecting this geometry.
|
||||
Required<std::string> rulesets; ///< Evaluate these rulesets.
|
||||
Optional<DateTime> start; ///< Search for advisories after this time.
|
||||
Optional<DateTime> end; ///< Search for advisories before this time.
|
||||
}; |
||||
/// Result models the outcome of calling Advisory::search.
|
||||
using Result = Outcome<std::vector<AirspaceAdvisory>, Error>; |
||||
/// Callback describes the function signature of the callback that is
|
||||
/// invoked when a call to Advisory::_search finishes.
|
||||
using Callback = std::function<void(const Result&)>; |
||||
}; |
||||
|
||||
/// ReportWeather bundles up types to ease interaction
|
||||
/// with Advisory::report_weather.
|
||||
struct ReportWeather { |
||||
/// Parameters bundles up input parameters.
|
||||
struct Parameters { |
||||
float latitude; ///< The latitude component of the takeoff point in [°].
|
||||
float longitude; ///< The longitude component of the takeoff point in [°].
|
||||
Optional<DateTime> start; ///< Search for weather data after this time.
|
||||
Optional<DateTime> end; ///< Search for weather data before this time.
|
||||
}; |
||||
/// Result models the outcome of calling Advisory::report_weather.
|
||||
using Result = Outcome<Weather, Error>; |
||||
/// Callback describes the function signature of the callback that is
|
||||
/// invoked when a call to Advisory::report_weather finishes.
|
||||
using Callback = std::function<void(const Result&)>; |
||||
}; |
||||
|
||||
/// for_id searches flight advisories for a flight plan and reports
|
||||
/// results back to 'cb'.
|
||||
virtual void for_id(const ForId::Parameters& parameters, const ForId::Callback& cb) = 0; |
||||
|
||||
/// search searches flight advisories for 'parameters' and reports
|
||||
/// results back to 'cb'.
|
||||
virtual void search(const Search::Parameters& parameters, const Search::Callback& cb) = 0; |
||||
|
||||
/// report_weather gets the current weather conditions and reports
|
||||
/// results back to 'cb'.
|
||||
virtual void report_weather(const ReportWeather::Parameters& parameters, const ReportWeather::Callback& cb) = 0; |
||||
|
||||
protected: |
||||
/// @cond
|
||||
Advisory() = default; |
||||
/// @endcond
|
||||
}; |
||||
|
||||
} // namespace airmap
|
||||
|
||||
#endif // AIRMAP_ADVISORY_H_
|
Binary file not shown.
Loading…
Reference in new issue