mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-15 01:05:35 +08:00
refs #789, fixed wrong geodetic height for onGround guessing
use null unit instead
This commit is contained in:
@@ -795,7 +795,7 @@ namespace BlackCore
|
|||||||
const CCallsign callsign(callsignChar, CCallsign::Aircraft);
|
const CCallsign callsign(callsignChar, CCallsign::Aircraft);
|
||||||
CAircraftSituation situation(
|
CAircraftSituation situation(
|
||||||
callsign,
|
callsign,
|
||||||
CCoordinateGeodetic(position->latitude, position->longitude, 0.0),
|
CCoordinateGeodetic(position->latitude, position->longitude), // geodetic height -> null
|
||||||
CAltitude(position->altitudeTrue, CAltitude::MeanSeaLevel, CLengthUnit::ft()),
|
CAltitude(position->altitudeTrue, CAltitude::MeanSeaLevel, CLengthUnit::ft()),
|
||||||
CHeading(position->heading, CHeading::True, CAngleUnit::deg()),
|
CHeading(position->heading, CHeading::True, CAngleUnit::deg()),
|
||||||
CAngle(position->pitch, CAngleUnit::deg()),
|
CAngle(position->pitch, CAngleUnit::deg()),
|
||||||
|
|||||||
@@ -162,7 +162,7 @@ namespace BlackMisc
|
|||||||
|
|
||||||
bool CAircraftSituation::isOnGroundGuessed() const
|
bool CAircraftSituation::isOnGroundGuessed() const
|
||||||
{
|
{
|
||||||
CLength heightAboveGround(this->getHeightAboveGround());
|
const CLength heightAboveGround(this->getHeightAboveGround());
|
||||||
if (!heightAboveGround.isNull())
|
if (!heightAboveGround.isNull())
|
||||||
{
|
{
|
||||||
return heightAboveGround.value(CLengthUnit::m()) < 1.0;
|
return heightAboveGround.value(CLengthUnit::m()) < 1.0;
|
||||||
@@ -172,7 +172,7 @@ namespace BlackMisc
|
|||||||
if (qAbs(this->getPitch().value(CAngleUnit::deg())) > 10) { return false; }
|
if (qAbs(this->getPitch().value(CAngleUnit::deg())) > 10) { return false; }
|
||||||
if (qAbs(this->getBank().value(CAngleUnit::deg())) > 10) { return false; }
|
if (qAbs(this->getBank().value(CAngleUnit::deg())) > 10) { return false; }
|
||||||
|
|
||||||
if (this->getGroundSpeed().value(CSpeedUnit::km_h()) > 80) { return false; }
|
if (this->getGroundSpeed().value(CSpeedUnit::km_h()) > 75) { return false; }
|
||||||
|
|
||||||
// not sure, but this is a guess
|
// not sure, but this is a guess
|
||||||
return true;
|
return true;
|
||||||
@@ -186,9 +186,10 @@ namespace BlackMisc
|
|||||||
// we have a sure value
|
// we have a sure value
|
||||||
return this->getAltitude();
|
return this->getAltitude();
|
||||||
}
|
}
|
||||||
if (!m_position.geodeticHeight().isNull() && !m_altitude.isNull())
|
const CLength gh(geodeticHeight());
|
||||||
|
if (!gh.isNull() && !m_altitude.isNull())
|
||||||
{
|
{
|
||||||
return m_altitude - m_position.geodeticHeight();
|
return m_altitude - gh;
|
||||||
}
|
}
|
||||||
return notAvialable;
|
return notAvialable;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -190,13 +190,19 @@ namespace BlackMisc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CCoordinateGeodetic::CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, BlackMisc::PhysicalQuantities::CLength height) :
|
CCoordinateGeodetic::CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, BlackMisc::PhysicalQuantities::CLength geodeticHeight) :
|
||||||
m_x(latitude.cos() * longitude.cos()),
|
m_x(latitude.cos() * longitude.cos()),
|
||||||
m_y(latitude.cos() * longitude.sin()),
|
m_y(latitude.cos() * longitude.sin()),
|
||||||
m_z(latitude.sin()),
|
m_z(latitude.sin()),
|
||||||
m_geodeticHeight(height)
|
m_geodeticHeight(geodeticHeight)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
CCoordinateGeodetic::CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees) :
|
||||||
|
CCoordinateGeodetic( { latitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { 0.0, BlackMisc::PhysicalQuantities::CLengthUnit::nullUnit() }) {}
|
||||||
|
|
||||||
|
CCoordinateGeodetic::CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees, double heightMeters) :
|
||||||
|
CCoordinateGeodetic( { latitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { heightMeters, BlackMisc::PhysicalQuantities::CLengthUnit::m() }) {}
|
||||||
|
|
||||||
CLatitude CCoordinateGeodetic::latitude() const
|
CLatitude CCoordinateGeodetic::latitude() const
|
||||||
{
|
{
|
||||||
return { std::atan2(m_z, std::hypot(m_x, m_y)), PhysicalQuantities::CAngleUnit::rad() };
|
return { std::atan2(m_z, std::hypot(m_x, m_y)), PhysicalQuantities::CAngleUnit::rad() };
|
||||||
|
|||||||
@@ -180,11 +180,13 @@ namespace BlackMisc
|
|||||||
CCoordinateGeodetic(const QVector3D &normal) : m_x(normal.x()), m_y(normal.y()), m_z(normal.z()) {}
|
CCoordinateGeodetic(const QVector3D &normal) : m_x(normal.x()), m_y(normal.y()), m_z(normal.z()) {}
|
||||||
|
|
||||||
//! Constructor by values
|
//! Constructor by values
|
||||||
CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, BlackMisc::PhysicalQuantities::CLength height);
|
CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, BlackMisc::PhysicalQuantities::CLength geodeticHeight);
|
||||||
|
|
||||||
|
//! Constructor by double values, but no geodetic height
|
||||||
|
CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees);
|
||||||
|
|
||||||
//! Constructor by values
|
//! Constructor by values
|
||||||
CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees, double heightMeters) :
|
CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees, double heightMeters);
|
||||||
CCoordinateGeodetic( { latitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { heightMeters, BlackMisc::PhysicalQuantities::CLengthUnit::m() }) {}
|
|
||||||
|
|
||||||
//! \copydoc ICoordinateGeodetic::latitude
|
//! \copydoc ICoordinateGeodetic::latitude
|
||||||
virtual CLatitude latitude() const override;
|
virtual CLatitude latitude() const override;
|
||||||
|
|||||||
Reference in New Issue
Block a user