mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-31 12:55:33 +08:00
Ref T275, added "latestOnGroundProviderElevation" to improve average elevation
This commit is contained in:
@@ -954,7 +954,7 @@ namespace BlackCore
|
||||
// so far we have requested it, but we set it upfront either by
|
||||
// a) average value from other plane in the vicinity or
|
||||
// b) by extrapolating
|
||||
const CElevationPlane averagePlane = this->averageElevationOfNonMovingAircraft(situation, CElevationPlane::minorAirportRadius());
|
||||
const CElevationPlane averagePlane = this->averageElevationOfNonMovingAircraft(situation, CElevationPlane::majorAirportRadius(), 2);
|
||||
if (!averagePlane.isNull())
|
||||
{
|
||||
correctedSituation.setGroundElevation(averagePlane, CAircraftSituation::Average);
|
||||
|
||||
@@ -127,6 +127,12 @@ namespace BlackCore
|
||||
return m_airspace->latestRemoteAircraftSituations();
|
||||
}
|
||||
|
||||
CAircraftSituationList CContextNetwork::latestOnGroundProviderElevations() const
|
||||
{
|
||||
Q_ASSERT(m_airspace);
|
||||
return m_airspace->latestOnGroundProviderElevations();
|
||||
}
|
||||
|
||||
CAircraftPartsList CContextNetwork::remoteAircraftParts(const CCallsign &callsign) const
|
||||
{
|
||||
Q_ASSERT(m_airspace);
|
||||
|
||||
@@ -94,6 +94,7 @@ namespace BlackCore
|
||||
virtual BlackMisc::Aviation::CAircraftSituationList remoteAircraftSituations(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual BlackMisc::Aviation::CAircraftSituation remoteAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, int index) const override;
|
||||
virtual BlackMisc::Aviation::CAircraftSituationList latestRemoteAircraftSituations() const override;
|
||||
virtual BlackMisc::Aviation::CAircraftSituationList latestOnGroundProviderElevations() const override;
|
||||
virtual int remoteAircraftSituationsCount(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual BlackMisc::Aviation::CAircraftPartsList remoteAircraftParts(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
virtual int remoteAircraftPartsCount(const BlackMisc::Aviation::CCallsign &callsign) const override;
|
||||
|
||||
@@ -540,6 +540,7 @@ namespace BlackMisc
|
||||
if (this->size() < minValues) { return CElevationPlane::null(); } // no change to succeed
|
||||
|
||||
QList<double> valuesInFt;
|
||||
int count = 0;
|
||||
for (const CAircraftSituation &situation : *this)
|
||||
{
|
||||
if (situation.getGroundElevationInfo() != CAircraftSituation::FromProvider) { continue; }
|
||||
@@ -548,8 +549,11 @@ namespace BlackMisc
|
||||
if (!situation.isWithinRange(reference, range)) { continue; }
|
||||
const double elvFt = situation.getGroundElevationPlane().getAltitude().value(CLengthUnit::ft());
|
||||
valuesInFt.push_back(elvFt);
|
||||
count++;
|
||||
if (count > 5 && valuesInFt.size() > 3 * minValues) { break; }
|
||||
}
|
||||
if (valuesInFt.size() < minValues) { return CElevationPlane::null(); }
|
||||
|
||||
if (count < minValues) { return CElevationPlane::null(); }
|
||||
|
||||
static const double MaxDevFt = CAircraftSituationChange::allowedAltitudeDeviation().value(CLengthUnit::ft());
|
||||
const QPair<double, double> elvStdDevMean = CMathUtils::standardDeviationAndMean(valuesInFt);
|
||||
|
||||
@@ -85,6 +85,14 @@ namespace BlackMisc
|
||||
return CAircraftSituationList(situations);
|
||||
}
|
||||
|
||||
CAircraftSituationList CRemoteAircraftProvider::latestOnGroundProviderElevations() const
|
||||
{
|
||||
QReadLocker l(&m_lockSituations);
|
||||
const QList<CAircraftSituation> situations(m_latestOnGroundProviderElevation.values());
|
||||
l.unlock();
|
||||
return CAircraftSituationList(situations);
|
||||
}
|
||||
|
||||
int CRemoteAircraftProvider::remoteAircraftSituationsCount(const CCallsign &callsign) const
|
||||
{
|
||||
QReadLocker l(&m_lockSituations);
|
||||
@@ -162,6 +170,7 @@ namespace BlackMisc
|
||||
QWriteLocker l(&m_lockSituations);
|
||||
m_situationsByCallsign.clear();
|
||||
m_latestSituationByCallsign.clear();
|
||||
m_latestOnGroundProviderElevation.clear();
|
||||
m_situationsAdded = 0;
|
||||
m_situationsLastModified.clear();
|
||||
m_testOffset.clear();
|
||||
@@ -466,9 +475,15 @@ namespace BlackMisc
|
||||
{
|
||||
QWriteLocker l(&m_lockSituations);
|
||||
CAircraftSituationList &situations = m_situationsByCallsign[callsign];
|
||||
if (situations.isEmpty()) { return 0; }
|
||||
updated = situations.setGroundElevationCheckedAndGuessGround(elevation, info, model, &change);
|
||||
if (updated < 1) { return 0; }
|
||||
m_situationsLastModified[callsign] = ts;
|
||||
const CAircraftSituation latest = situations.front();
|
||||
if (info == CAircraftSituation::FromProvider && latest.isOnGround())
|
||||
{
|
||||
m_latestOnGroundProviderElevation[callsign] = latest;
|
||||
}
|
||||
}
|
||||
|
||||
// update change
|
||||
@@ -629,7 +644,7 @@ namespace BlackMisc
|
||||
|
||||
CElevationPlane CRemoteAircraftProvider::averageElevationOfNonMovingAircraft(const CAircraftSituation &reference, const CLength &range, int minValues) const
|
||||
{
|
||||
const CAircraftSituationList situations = this->latestRemoteAircraftSituations();
|
||||
const CAircraftSituationList situations = this->latestOnGroundProviderElevations();
|
||||
return situations.averageElevationOfNonMovingAircraft(reference, range, minValues);
|
||||
}
|
||||
|
||||
@@ -691,8 +706,19 @@ namespace BlackMisc
|
||||
|
||||
bool CRemoteAircraftProvider::removeAircraft(const CCallsign &callsign)
|
||||
{
|
||||
{ QWriteLocker l1(&m_lockParts); m_partsByCallsign.remove(callsign); m_aircraftWithParts.remove(callsign); m_partsLastModified.remove(callsign); }
|
||||
{ QWriteLocker l2(&m_lockSituations); m_situationsByCallsign.remove(callsign); m_latestSituationByCallsign.remove(callsign); m_situationsLastModified.remove(callsign); }
|
||||
{
|
||||
QWriteLocker l1(&m_lockParts);
|
||||
m_partsByCallsign.remove(callsign);
|
||||
m_aircraftWithParts.remove(callsign);
|
||||
m_partsLastModified.remove(callsign);
|
||||
}
|
||||
{
|
||||
QWriteLocker l2(&m_lockSituations);
|
||||
m_situationsByCallsign.remove(callsign);
|
||||
m_latestSituationByCallsign.remove(callsign);
|
||||
m_latestOnGroundProviderElevation.remove(callsign);
|
||||
m_situationsLastModified.remove(callsign);
|
||||
}
|
||||
{ QWriteLocker l4(&m_lockPartsHistory); m_aircraftPartsMessages.remove(callsign); }
|
||||
bool removedCallsign = false;
|
||||
{
|
||||
@@ -769,6 +795,12 @@ namespace BlackMisc
|
||||
return this->provider()->latestRemoteAircraftSituations();
|
||||
}
|
||||
|
||||
CAircraftSituationList CRemoteAircraftAware::latestOnGroundProviderElevations() const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
return this->provider()->latestOnGroundProviderElevations();
|
||||
}
|
||||
|
||||
CAircraftSituationChangeList CRemoteAircraftAware::remoteAircraftSituationChanges(const CCallsign &callsign) const
|
||||
{
|
||||
Q_ASSERT_X(this->provider(), Q_FUNC_INFO, "No object available");
|
||||
|
||||
@@ -101,6 +101,10 @@ namespace BlackMisc
|
||||
//! \threadsafe
|
||||
virtual Aviation::CAircraftSituationList latestRemoteAircraftSituations() const = 0;
|
||||
|
||||
//! Latest aircraft situation "on ground" having a provider elevation
|
||||
//! \threadsafe
|
||||
virtual Aviation::CAircraftSituationList latestOnGroundProviderElevations() const = 0;
|
||||
|
||||
//! Number of remote aircraft situations for callsign
|
||||
//! \remark latest situations first
|
||||
//! \threadsafe
|
||||
@@ -266,6 +270,7 @@ namespace BlackMisc
|
||||
virtual Aviation::CAircraftSituationList remoteAircraftSituations(const Aviation::CCallsign &callsign) const override;
|
||||
virtual Aviation::CAircraftSituation remoteAircraftSituation(const Aviation::CCallsign &callsign, int index) const override;
|
||||
virtual Aviation::CAircraftSituationList latestRemoteAircraftSituations() const override;
|
||||
virtual Aviation::CAircraftSituationList latestOnGroundProviderElevations() const override;
|
||||
virtual int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const override;
|
||||
virtual Aviation::CAircraftPartsList remoteAircraftParts(const Aviation::CCallsign &callsign) const override;
|
||||
virtual int remoteAircraftPartsCount(const Aviation::CCallsign &callsign) const override;
|
||||
@@ -406,11 +411,12 @@ namespace BlackMisc
|
||||
//! \threadsafe
|
||||
void storeChange(const Aviation::CAircraftSituationChange &change);
|
||||
|
||||
Aviation::CAircraftSituationListPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CAircraftSituationPerCallsign m_latestSituationByCallsign; //!< latest situations, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CAircraftPartsListPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CAircraftSituationChangeListPerCallsign m_changesByCallsign; //!< changes, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CCallsignSet m_aircraftWithParts; //!< aircraft supporting parts, thread safe access required
|
||||
Aviation::CAircraftSituationListPerCallsign m_situationsByCallsign; //!< situations, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CAircraftSituationPerCallsign m_latestSituationByCallsign; //!< latest situations, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CAircraftSituationPerCallsign m_latestOnGroundProviderElevation; //!< situation on ground with elevation from provider
|
||||
Aviation::CAircraftPartsListPerCallsign m_partsByCallsign; //!< parts, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CAircraftSituationChangeListPerCallsign m_changesByCallsign; //!< changes, for performance reasons per callsign, thread safe access required
|
||||
Aviation::CCallsignSet m_aircraftWithParts; //!< aircraft supporting parts, thread safe access required
|
||||
int m_situationsAdded = 0; //!< total number of situations added, thread safe access required
|
||||
int m_partsAdded = 0; //!< total number of parts added, thread safe access required
|
||||
|
||||
@@ -470,6 +476,9 @@ namespace BlackMisc
|
||||
//! \copydoc IRemoteAircraftProvider::latestRemoteAircraftSituations
|
||||
Aviation::CAircraftSituationList latestRemoteAircraftSituations() const;
|
||||
|
||||
//! \copydoc IRemoteAircraftProvider::latestOnGroundProviderElevations
|
||||
Aviation::CAircraftSituationList latestOnGroundProviderElevations() const;
|
||||
|
||||
//! \copydoc IRemoteAircraftProvider::remoteAircraftSituationsCount
|
||||
int remoteAircraftSituationsCount(const Aviation::CCallsign &callsign) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user