diff --git a/src/blackcore/vatsim/networkvatlib.cpp b/src/blackcore/vatsim/networkvatlib.cpp index e3ed9efb2..0b2f4f83e 100644 --- a/src/blackcore/vatsim/networkvatlib.cpp +++ b/src/blackcore/vatsim/networkvatlib.cpp @@ -795,7 +795,7 @@ namespace BlackCore const CCallsign callsign(callsignChar, CCallsign::Aircraft); CAircraftSituation situation( callsign, - CCoordinateGeodetic(position->latitude, position->longitude, 0.0), + CCoordinateGeodetic(position->latitude, position->longitude), // geodetic height -> null CAltitude(position->altitudeTrue, CAltitude::MeanSeaLevel, CLengthUnit::ft()), CHeading(position->heading, CHeading::True, CAngleUnit::deg()), CAngle(position->pitch, CAngleUnit::deg()), diff --git a/src/blackmisc/aviation/aircraftsituation.cpp b/src/blackmisc/aviation/aircraftsituation.cpp index f73f1e173..63e0a02c2 100644 --- a/src/blackmisc/aviation/aircraftsituation.cpp +++ b/src/blackmisc/aviation/aircraftsituation.cpp @@ -162,7 +162,7 @@ namespace BlackMisc bool CAircraftSituation::isOnGroundGuessed() const { - CLength heightAboveGround(this->getHeightAboveGround()); + const CLength heightAboveGround(this->getHeightAboveGround()); if (!heightAboveGround.isNull()) { 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->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 return true; @@ -186,9 +186,10 @@ namespace BlackMisc // we have a sure value 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; } diff --git a/src/blackmisc/geo/coordinategeodetic.cpp b/src/blackmisc/geo/coordinategeodetic.cpp index eba2c600c..17a52cc85 100644 --- a/src/blackmisc/geo/coordinategeodetic.cpp +++ b/src/blackmisc/geo/coordinategeodetic.cpp @@ -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_y(latitude.cos() * longitude.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 { return { std::atan2(m_z, std::hypot(m_x, m_y)), PhysicalQuantities::CAngleUnit::rad() }; diff --git a/src/blackmisc/geo/coordinategeodetic.h b/src/blackmisc/geo/coordinategeodetic.h index dade2a58b..f14d39b8d 100644 --- a/src/blackmisc/geo/coordinategeodetic.h +++ b/src/blackmisc/geo/coordinategeodetic.h @@ -180,11 +180,13 @@ namespace BlackMisc CCoordinateGeodetic(const QVector3D &normal) : m_x(normal.x()), m_y(normal.y()), m_z(normal.z()) {} //! 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 - CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees, double heightMeters) : - CCoordinateGeodetic( { latitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { longitudeDegrees, BlackMisc::PhysicalQuantities::CAngleUnit::deg() }, { heightMeters, BlackMisc::PhysicalQuantities::CLengthUnit::m() }) {} + CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees, double heightMeters); //! \copydoc ICoordinateGeodetic::latitude virtual CLatitude latitude() const override;