**************************************************************************************/
class FGAirport : public FGPositioned
{
-public:
+ public:
FGAirport(PositionedID aGuid, const std::string& id, const SGGeod& location,
const std::string& name, bool has_metar, Type aType);
~FGAirport();
/**
* reload the ILS data from XML if required.
- * @result true if the data was refreshed, false if no data was loaded
- * or previously cached data is still correct.
*/
- bool validateILSData();
+ void validateILSData();
SGGeod getTowerLocation() const;
void setMetar(bool value) { _has_metar = value; }
- FGRunway* getActiveRunwayForUsage() const;
+ FGRunwayRef getActiveRunwayForUsage() const;
FGAirportDynamics *getDynamics();
unsigned int numRunways() const;
unsigned int numHelipads() const;
- FGRunway* getRunwayByIndex(unsigned int aIndex) const;
- FGHelipad* getHelipadByIndex(unsigned int aIndex) const;
+ FGRunwayRef getRunwayByIndex(unsigned int aIndex) const;
+ FGHelipadRef getHelipadByIndex(unsigned int aIndex) const;
FGRunwayMap getRunwayMap() const;
FGHelipadMap getHelipadMap() const;
bool hasRunwayWithIdent(const std::string& aIdent) const;
bool hasHelipadWithIdent(const std::string& aIdent) const;
- FGRunway* getRunwayByIdent(const std::string& aIdent) const;
- FGHelipad* getHelipadByIdent(const std::string& aIdent) const;
- FGRunway* findBestRunwayForHeading(double aHeading) const;
+ FGRunwayRef getRunwayByIdent(const std::string& aIdent) const;
+ FGHelipadRef getHelipadByIdent(const std::string& aIdent) const;
+
+ struct FindBestRunwayForHeadingParams {
+ FindBestRunwayForHeadingParams() {
+ lengthWeight = 0.01;
+ widthWeight = 0.01;
+ surfaceWeight = 10;
+ deviationWeight = 1;
+ ilsWeight = 0;
+ }
+ double lengthWeight;
+ double widthWeight;
+ double surfaceWeight;
+ double deviationWeight;
+ double ilsWeight;
+ };
+ FGRunwayRef findBestRunwayForHeading(double aHeading, struct FindBestRunwayForHeadingParams * parms = NULL ) const;
/**
* return the most likely target runway based on a position.
* This is a good approximation of which runway the position is on or
* aiming towards.
*/
- FGRunway* findBestRunwayForPos(const SGGeod& aPos) const;
+ FGRunwayRef findBestRunwayForPos(const SGGeod& aPos) const;
/**
* Retrieve all runways at the airport, but excluding the reciprocal
bool hasHardRunwayOfLengthFt(double aLengthFt) const;
unsigned int numTaxiways() const;
- FGTaxiway* getTaxiwayByIndex(unsigned int aIndex) const;
+ FGTaxiwayRef getTaxiwayByIndex(unsigned int aIndex) const;
FGTaxiwayList getTaxiways() const;
unsigned int numPavements() const;
- FGPavement* getPavementByIndex(unsigned int aIndex) const;
+ FGPavementRef getPavementByIndex(unsigned int aIndex) const;
FGPavementList getPavements() const;
class AirportFilter : public Filter
- {
- public:
- virtual bool pass(FGPositioned* aPos) const {
- return passAirport(static_cast<FGAirport*>(aPos));
- }
-
- virtual Type minType() const {
- return AIRPORT;
- }
-
- virtual Type maxType() const {
- return AIRPORT;
- }
-
- virtual bool passAirport(FGAirport* aApt) const {
- return true;
- }
+ {
+ public:
+ virtual bool pass(FGPositioned* aPos) const {
+ return passAirport(static_cast<FGAirport*>(aPos));
+ }
+
+ virtual Type minType() const {
+ return AIRPORT;
+ }
+
+ virtual Type maxType() const {
+ return AIRPORT;
+ }
+
+ virtual bool passAirport(FGAirport* aApt) const {
+ return true;
+ }
};
/**
double mMinLengthFt;
};
+ /**
+ * Filter which passes specified port type and in case of airport checks
+ * if a runway larger the /sim/navdb/min-runway-lenght-ft exists.
+ */
+ class TypeRunwayFilter:
+ public AirportFilter
+ {
+ public:
+ TypeRunwayFilter();
+
+ /**
+ * Construct from string containing type (airport, seaport or heliport)
+ */
+ bool fromTypeString(const std::string& type);
+
+ virtual FGPositioned::Type minType() const { return _type; }
+ virtual FGPositioned::Type maxType() const { return _type; }
+ virtual bool pass(FGPositioned* pos) const;
+
+ protected:
+ FGPositioned::Type _type;
+ double _min_runway_length_ft;
+ };
+
void setProcedures(const std::vector<flightgear::SID*>& aSids,
const std::vector<flightgear::STAR*>& aStars,
* match for filter, and return it cast to FGAirport. The default filter
* passes airports, but not seaports or heliports
*/
- static FGAirport* findClosest(const SGGeod& aPos, double aCuttofNm, Filter* filter = NULL);
+ static FGAirportRef findClosest(const SGGeod& aPos, double aCuttofNm, Filter* filter = NULL);
/**
* Helper to look up an FGAirport instance by unique ident. Throws an
* exception if the airport could not be found - so callers can assume
* the result is non-NULL.
*/
- static FGAirport* getByIdent(const std::string& aIdent);
+ static FGAirportRef getByIdent(const std::string& aIdent);
/**
* Helper to look up an FGAirport instance by unique ident. Returns NULL
* if the airport could not be found.
*/
- static FGAirport* findByIdent(const std::string& aIdent);
+ static FGAirportRef findByIdent(const std::string& aIdent);
/**
* Specialised helper to implement the AirportList dialog. Performs a
* matches in a format suitable for use by a puaList.
*/
static char** searchNamesAndIdents(const std::string& aFilter);
-
+
+
+ /**
+ * Sort an FGPositionedList of airports by size (number of runways + length)
+ * this is meant to prioritise more important airports.
+ */
+ static void sortBySize(FGPositionedList&);
+
flightgear::CommStationList commStationsOfType(FGPositioned::Type aTy) const;
flightgear::CommStationList commStations() const;
* Helper to parse property data loaded from an ICAO.twr.xml file
*/
void readTowerData(SGPropertyNode* aRoot);
-
+
+ PositionedIDVec itemsOfType(FGPositioned::Type ty) const;
+
std::string _name;
bool _has_metar;
FGAirportDynamics *_dynamics;
void loadProcedures() const;
mutable bool mTowerDataLoaded;
+ mutable SGGeod mTowerPosition;
+
mutable bool mRunwaysLoaded;
mutable bool mHelipadsLoaded;
mutable bool mTaxiwaysLoaded;
mutable bool mProceduresLoaded;
+
+ mutable bool mThresholdDataLoaded;
bool mILSDataLoaded;
+
+ mutable std::vector<FGRunwayRef> mRunways;
- mutable PositionedIDVec mRunways;
mutable PositionedIDVec mHelipads;
mutable PositionedIDVec mTaxiways;
PositionedIDVec mPavements;