From 55b28e24a630d52ef1a85a31b19ba3196224e57b Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Tue, 18 Feb 2020 03:01:23 +0100 Subject: [PATCH] Ref T773, average elevation from cached (on ground) elevations --- .../simulation/simulationenvironmentprovider.cpp | 14 ++++++++++++++ .../simulation/simulationenvironmentprovider.h | 11 +++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/blackmisc/simulation/simulationenvironmentprovider.cpp b/src/blackmisc/simulation/simulationenvironmentprovider.cpp index 474ebe1ab..a58131b53 100644 --- a/src/blackmisc/simulation/simulationenvironmentprovider.cpp +++ b/src/blackmisc/simulation/simulationenvironmentprovider.cpp @@ -7,6 +7,8 @@ */ #include "simulationenvironmentprovider.h" +#include "blackmisc/aviation/aircraftsituationchange.h" + #include "verify.h" #include @@ -165,6 +167,12 @@ namespace BlackMisc return m_elvCoordinatesGnd; } + CElevationPlane ISimulationEnvironmentProvider::averageElevationOfOnGroundAircraft(const CAircraftSituation &reference, const CLength &range, int minValues) const + { + const CCoordinateGeodeticList coordinates = this->getElevationCoordinatesOnGround(); + return coordinates.averageGeodeticHeight(reference, range, CAircraftSituationChange::allowedAltitudeDeviation(), minValues); + } + CCoordinateGeodeticList ISimulationEnvironmentProvider::getAllElevationCoordinates(int &maxRemembered) const { QReadLocker l(&m_lockElvCoordinates); @@ -515,6 +523,12 @@ namespace BlackMisc return this->provider()->findClosestElevationWithinRangeOrRequest(reference, range, callsign); } + CElevationPlane CSimulationEnvironmentAware::averageElevationOfOnGroundAircraft(const CAircraftSituation &reference, const CLength &range, int minValues) const + { + if (!this->hasProvider()) { return CElevationPlane::null(); } + return this->provider()->averageElevationOfOnGroundAircraft(reference, range, minValues); + } + bool CSimulationEnvironmentAware::requestElevation(const ICoordinateGeodetic &reference, const CCallsign &callsign) { if (!this->hasProvider()) { return false; } diff --git a/src/blackmisc/simulation/simulationenvironmentprovider.h b/src/blackmisc/simulation/simulationenvironmentprovider.h index 5c82768e2..65b3ce068 100644 --- a/src/blackmisc/simulation/simulationenvironmentprovider.h +++ b/src/blackmisc/simulation/simulationenvironmentprovider.h @@ -42,6 +42,14 @@ namespace BlackMisc //! \threadsafe Geo::CCoordinateGeodeticList getElevationCoordinatesOnGround() const; + //! Average elevation of "on ground" cached values + //! \threadsafe + Geo::CElevationPlane averageElevationOfOnGroundAircraft(const Aviation::CAircraftSituation &reference, const PhysicalQuantities::CLength &range, int minValues) const; + + //! Highest elevation + //! \threadsafe + Aviation::CAltitude highestElevation() const; + //! Find closest elevation (or return NULL) //! \threadsafe Geo::CElevationPlane findClosestElevationWithinRange(const Geo::ICoordinateGeodetic &reference, const PhysicalQuantities::CLength &range) const; @@ -285,6 +293,9 @@ namespace BlackMisc //! \copydoc ISimulationEnvironmentProvider::findClosestElevationWithinRangeOrRequest Geo::CElevationPlane findClosestElevationWithinRangeOrRequest(const Geo::ICoordinateGeodetic &reference, const PhysicalQuantities::CLength &range, const Aviation::CCallsign &callsign); + //! \copydoc ISimulationEnvironmentProvider::averageElevationOfOnGroundAircraft + Geo::CElevationPlane averageElevationOfOnGroundAircraft(const Aviation::CAircraftSituation &reference, const PhysicalQuantities::CLength &range, int minValues) const; + //! \copydoc ISimulationEnvironmentProvider::requestElevation bool requestElevation(const Geo::ICoordinateGeodetic &reference, const Aviation::CCallsign &callsign);