refs #837 ICoordinateGeodetic::geodeticHeight is a CAltitude.

This commit is contained in:
Mathew Sutcliffe
2016-12-15 02:29:59 +00:00
parent 544a1cca45
commit 6c36cd202b
23 changed files with 50 additions and 39 deletions

View File

@@ -41,7 +41,7 @@ namespace BlackSample
QDateTime dtUntil = dtFrom.addSecs(60 * 60); // 1 hour QDateTime dtUntil = dtFrom.addSecs(60 * 60); // 1 hour
QDateTime dtFrom2 = dtUntil; QDateTime dtFrom2 = dtUntil;
QDateTime dtUntil2 = dtUntil.addSecs(60 * 60); QDateTime dtUntil2 = dtUntil.addSecs(60 * 60);
CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() });
CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"), CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"),
CFrequency(118.7, CFrequencyUnit::MHz()), CFrequency(118.7, CFrequencyUnit::MHz()),
geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil); geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil);

View File

@@ -48,7 +48,7 @@ namespace BlackSample
CFrequency freqEddmTwr(118.7, CFrequencyUnit::MHz()); CFrequency freqEddmTwr(118.7, CFrequencyUnit::MHz());
CCallsign callsignEddmTwr("eddm_twr"); CCallsign callsignEddmTwr("eddm_twr");
CCoordinateGeodetic geoPos = CCoordinateGeodetic geoPos =
CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() });
CAtcStation station1(callsignEddmTwr, CUser("123456", "Joe Doe"), CAtcStation station1(callsignEddmTwr, CUser("123456", "Joe Doe"),
freqEddmTwr, freqEddmTwr,
geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil); geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil);

View File

@@ -63,7 +63,7 @@ namespace BlackSample
qDebug() << "-------"; qDebug() << "-------";
QDateTime dtFrom = QDateTime::currentDateTimeUtc(); QDateTime dtFrom = QDateTime::currentDateTimeUtc();
QDateTime dtUntil = dtFrom.addSecs(60 * 60); // 1 hour QDateTime dtUntil = dtFrom.addSecs(60 * 60); // 1 hour
CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() });
CAtcStation station(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"), CAtcStation station(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"),
CFrequency(118.7, CFrequencyUnit::MHz()), geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil); CFrequency(118.7, CFrequencyUnit::MHz()), geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil);
json = station.toJson(); json = station.toJson();

View File

@@ -360,7 +360,7 @@ namespace BlackSample
testserviceInterface.receiveCallsign(callsign); testserviceInterface.receiveCallsign(callsign);
qDebug() << "Send callsign via interface" << callsign; qDebug() << "Send callsign via interface" << callsign;
CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); // Munich CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() }); // Munich
CAtcStation station(CCallsign("eddm_twr"), CUser("123456", "Joe Controller"), CAtcStation station(CCallsign("eddm_twr"), CUser("123456", "Joe Controller"),
CFrequency(118.7, CFrequencyUnit::MHz()), CFrequency(118.7, CFrequencyUnit::MHz()),
geoPos, CLength(50, CLengthUnit::km())); geoPos, CLength(50, CLengthUnit::km()));
@@ -370,7 +370,7 @@ namespace BlackSample
// Geo // Geo
// EDDF: 50° 2 0″ N, 8° 34 14″ E, 100m MSL // EDDF: 50° 2 0″ N, 8° 34 14″ E, 100m MSL
geoPos = CCoordinateGeodetic::fromWgs84("50° 2 1″ 23 N", "8° 34 14″ E", CLength(111, CLengthUnit::m())); geoPos = CCoordinateGeodetic::fromWgs84("50° 2 1″ 23 N", "8° 34 14″ E", { 111, CLengthUnit::m() });
testserviceInterface.receiveGeoPosition(geoPos); testserviceInterface.receiveGeoPosition(geoPos);
qDebug() << "Send geo position" << geoPos; qDebug() << "Send geo position" << geoPos;

View File

@@ -94,7 +94,7 @@ namespace BlackSample
*/ */
CAtcStation Testservice::getAtcStation() const CAtcStation Testservice::getAtcStation() const
{ {
CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); // Munich CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() }); // Munich
CAtcStation station(CCallsign("eddm_twr"), CUser("654321", "client"), CAtcStation station(CCallsign("eddm_twr"), CUser("654321", "client"),
CFrequency(118.7, CFrequencyUnit::MHz()), CFrequency(118.7, CFrequencyUnit::MHz()),
geoPos, CLength(50, CLengthUnit::km())); geoPos, CLength(50, CLengthUnit::km()));

View File

@@ -74,7 +74,7 @@ namespace BlackSample
QDateTime dtFrom2 = dtUntil; QDateTime dtFrom2 = dtUntil;
QDateTime dtUntil2 = dtUntil.addSecs(60 * 60); QDateTime dtUntil2 = dtUntil.addSecs(60 * 60);
CCoordinateGeodetic geoPos = CCoordinateGeodetic geoPos =
CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() });
CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"), CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"),
CFrequency(118.7, CFrequencyUnit::MHz()), CFrequency(118.7, CFrequencyUnit::MHz()),
geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil); geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil);

View File

@@ -32,7 +32,7 @@ namespace BlackGui
this->m_columns.addColumn(CColumn("distance", CAirport::IndexRelativeDistance, new CAirspaceDistanceFormatter())); this->m_columns.addColumn(CColumn("distance", CAirport::IndexRelativeDistance, new CAirspaceDistanceFormatter()));
this->m_columns.addColumn(CColumn("bearing", CAirport::IndexRelativeBearing, new CAngleDegreeFormatter())); this->m_columns.addColumn(CColumn("bearing", CAirport::IndexRelativeBearing, new CAngleDegreeFormatter()));
this->m_columns.addColumn(CColumn::standardString("name", CAirport::IndexDescriptiveName)); this->m_columns.addColumn(CColumn::standardString("name", CAirport::IndexDescriptiveName));
this->m_columns.addColumn(CColumn("elevation", CAirport::IndexElevation, new CPhysiqalQuantiyFormatter<CLengthUnit, CLength>(CLengthUnit::ft(), 0))); this->m_columns.addColumn(CColumn("elevation", CAirport::IndexElevation, new CAltitudeFormatter()));
this->m_columns.addColumn(CColumn("latitude", CAirport::IndexLatitude, new CLatLonFormatter())); this->m_columns.addColumn(CColumn("latitude", CAirport::IndexLatitude, new CLatLonFormatter()));
this->m_columns.addColumn(CColumn("longitude", CAirport::IndexLatitude, new CLatLonFormatter())); this->m_columns.addColumn(CColumn("longitude", CAirport::IndexLatitude, new CLatLonFormatter()));

View File

@@ -66,7 +66,7 @@ namespace BlackMisc
const BlackMisc::PhysicalQuantities::CAngle &pitch = {}, const BlackMisc::PhysicalQuantities::CAngle &pitch = {},
const BlackMisc::PhysicalQuantities::CAngle &bank = {}, const BlackMisc::PhysicalQuantities::CAngle &bank = {},
const BlackMisc::PhysicalQuantities::CSpeed &gs = {}, const BlackMisc::PhysicalQuantities::CSpeed &gs = {},
const BlackMisc::Aviation::CAltitude &groundElevation = { { 0, nullptr }, BlackMisc::Aviation::CAltitude::MeanSeaLevel }); const BlackMisc::Aviation::CAltitude &groundElevation = { 0, nullptr });
//! Comprehensive constructor //! Comprehensive constructor
CAircraftSituation(const BlackMisc::Aviation::CCallsign &correspondingCallsign, CAircraftSituation(const BlackMisc::Aviation::CCallsign &correspondingCallsign,
@@ -75,7 +75,7 @@ namespace BlackMisc
const BlackMisc::PhysicalQuantities::CAngle &pitch = {}, const BlackMisc::PhysicalQuantities::CAngle &pitch = {},
const BlackMisc::PhysicalQuantities::CAngle &bank = {}, const BlackMisc::PhysicalQuantities::CAngle &bank = {},
const BlackMisc::PhysicalQuantities::CSpeed &gs = {}, const BlackMisc::PhysicalQuantities::CSpeed &gs = {},
const BlackMisc::Aviation::CAltitude &groundElevation = { { 0, nullptr }, BlackMisc::Aviation::CAltitude::MeanSeaLevel }); const BlackMisc::Aviation::CAltitude &groundElevation = { 0, nullptr });
//! \copydoc BlackMisc::Mixin::Index::propertyByIndex //! \copydoc BlackMisc::Mixin::Index::propertyByIndex
CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const; CVariant propertyByIndex(const BlackMisc::CPropertyIndex &index) const;

View File

@@ -61,7 +61,7 @@ namespace BlackMisc
{ {
CAirport airport(json.value(prefix + "icao").toString()); CAirport airport(json.value(prefix + "icao").toString());
airport.setDescriptiveName(json.value(prefix + "name").toString()); airport.setDescriptiveName(json.value(prefix + "name").toString());
airport.setElevation(CLength(json.value(prefix + "altitude").toInt(), CLengthUnit::ft())); airport.setElevation(CAltitude(json.value(prefix + "altitude").toInt(), CLengthUnit::ft()));
const CCoordinateGeodetic pos(json.value(prefix + "latitude").toDouble(), json.value(prefix + "longitude").toDouble(), 0); const CCoordinateGeodetic pos(json.value(prefix + "latitude").toDouble(), json.value(prefix + "longitude").toDouble(), 0);
airport.setPosition(pos); airport.setPosition(pos);
airport.setOperating(json.value(prefix + "operating").toString() == QStringLiteral("Y")); airport.setOperating(json.value(prefix + "operating").toString() == QStringLiteral("Y"));

View File

@@ -93,11 +93,11 @@ namespace BlackMisc
//! Elevation //! Elevation
//! \sa geodeticHeight //! \sa geodeticHeight
const BlackMisc::PhysicalQuantities::CLength getElevation() const { return this->geodeticHeight(); } const BlackMisc::Aviation::CAltitude &getElevation() const { return this->geodeticHeight(); }
//! Elevation //! Elevation
//! \sa setGeodeticHeight //! \sa setGeodeticHeight
void setElevation(const BlackMisc::PhysicalQuantities::CLength &elevation) { return this->m_position.setGeodeticHeight(elevation); } void setElevation(const BlackMisc::Aviation::CAltitude &elevation) { return this->m_position.setGeodeticHeight(elevation); }
//! Is the airport still active? //! Is the airport still active?
bool isOperating() const { return m_operating; } bool isOperating() const { return m_operating; }
@@ -109,8 +109,7 @@ namespace BlackMisc
void updateMissingParts(const CAirport &airport); void updateMissingParts(const CAirport &airport);
//! \copydoc Geo::ICoordinateGeodetic::geodeticHeight //! \copydoc Geo::ICoordinateGeodetic::geodeticHeight
//! \remarks this should be used for elevation as depicted here: http://en.wikipedia.org/wiki/Altitude#mediaviewer/File:Vertical_distances.svg const BlackMisc::Aviation::CAltitude &geodeticHeight() const override { return this->m_position.geodeticHeight(); }
const BlackMisc::PhysicalQuantities::CLength &geodeticHeight() const override { return this->m_position.geodeticHeight(); }
//! Valid ICAO code //! Valid ICAO code
bool hasValidIcaoCode() const { return !this->getIcao().isEmpty(); } bool hasValidIcaoCode() const { return !this->getIcao().isEmpty(); }

View File

@@ -79,6 +79,9 @@ namespace BlackMisc
//! Constructor //! Constructor
CAltitude(double value, ReferenceDatum datum, const BlackMisc::PhysicalQuantities::CLengthUnit &unit) : CLength(value, unit), m_datum(datum) {} CAltitude(double value, ReferenceDatum datum, const BlackMisc::PhysicalQuantities::CLengthUnit &unit) : CLength(value, unit), m_datum(datum) {}
//! Constructor
CAltitude(double value, const BlackMisc::PhysicalQuantities::CLengthUnit &unit) : CLength(value, unit), m_datum(MeanSeaLevel) {}
//! Altitude as string //! Altitude as string
CAltitude(const QString &altitudeAsString, BlackMisc::PhysicalQuantities::CPqString::SeparatorMode mode = BlackMisc::PhysicalQuantities::CPqString::SeparatorsLocale); CAltitude(const QString &altitudeAsString, BlackMisc::PhysicalQuantities::CPqString::SeparatorMode mode = BlackMisc::PhysicalQuantities::CPqString::SeparatorsLocale);

View File

@@ -340,7 +340,7 @@ namespace BlackMisc
return this->getPosition().longitude(); return this->getPosition().longitude();
} }
const CLength &CAtcStation::geodeticHeight() const const CAltitude &CAtcStation::geodeticHeight() const
{ {
return this->m_position.geodeticHeight(); return this->m_position.geodeticHeight();
} }

View File

@@ -236,8 +236,7 @@ namespace BlackMisc
virtual BlackMisc::Geo::CLongitude longitude() const override; virtual BlackMisc::Geo::CLongitude longitude() const override;
//! \copydoc Geo::ICoordinateGeodetic::geodeticHeight //! \copydoc Geo::ICoordinateGeodetic::geodeticHeight
//! \remarks this should be used for elevation as depicted here: http://en.wikipedia.org/wiki/Altitude#mediaviewer/File:Vertical_distances.svg const BlackMisc::Aviation::CAltitude &geodeticHeight() const override;
const BlackMisc::PhysicalQuantities::CLength &geodeticHeight() const override;
//! \copydoc Geo::ICoordinateGeodetic::normalVector //! \copydoc Geo::ICoordinateGeodetic::normalVector
virtual QVector3D normalVector() const override; virtual QVector3D normalVector() const override;

View File

@@ -16,6 +16,7 @@
#include <QtGlobal> #include <QtGlobal>
#include <cmath> #include <cmath>
using namespace BlackMisc::Aviation;
using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Math; using namespace BlackMisc::Math;
@@ -29,7 +30,7 @@ namespace BlackMisc
return s.arg(this->latitude().valueRoundedWithUnit(6, i18n)).arg(this->longitude().valueRoundedWithUnit(6, i18n)).arg(this->m_geodeticHeight.valueRoundedWithUnit(6, i18n)); return s.arg(this->latitude().valueRoundedWithUnit(6, i18n)).arg(this->longitude().valueRoundedWithUnit(6, i18n)).arg(this->m_geodeticHeight.valueRoundedWithUnit(6, i18n));
} }
CCoordinateGeodetic CCoordinateGeodetic::fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const CLength &geodeticHeight) CCoordinateGeodetic CCoordinateGeodetic::fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const CAltitude &geodeticHeight)
{ {
CLatitude lat = CLatitude::fromWgs84(latitudeWgs84); CLatitude lat = CLatitude::fromWgs84(latitudeWgs84);
CLongitude lon = CLongitude::fromWgs84(longitudeWgs84); CLongitude lon = CLongitude::fromWgs84(longitudeWgs84);
@@ -189,7 +190,7 @@ namespace BlackMisc
} }
} }
CCoordinateGeodetic::CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, BlackMisc::PhysicalQuantities::CLength geodeticHeight) : CCoordinateGeodetic::CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, CAltitude 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()),

View File

@@ -13,6 +13,7 @@
#define BLACKMISC_COORDINATEGEODETIC_H #define BLACKMISC_COORDINATEGEODETIC_H
#include "blackmisc/blackmiscexport.h" #include "blackmisc/blackmiscexport.h"
#include "blackmisc/aviation/altitude.h"
#include "blackmisc/geo/latitude.h" #include "blackmisc/geo/latitude.h"
#include "blackmisc/geo/longitude.h" #include "blackmisc/geo/longitude.h"
#include "blackmisc/metaclass.h" #include "blackmisc/metaclass.h"
@@ -32,7 +33,9 @@ namespace BlackMisc
{ {
namespace Geo namespace Geo
{ {
//! Geodetic coordinate //! Geodetic coordinate, a position in 3D space relative to the reference geoid.
//!
//! Composed of a latitude, longitude, and height (aka altitude, aka elevation).
//! \sa http://www.esri.com/news/arcuser/0703/geoid1of3.html //! \sa http://www.esri.com/news/arcuser/0703/geoid1of3.html
//! \sa http://http://www.gmat.unsw.edu.au/snap/gps/clynch_pdfs/coordcvt.pdf (page 5) //! \sa http://http://www.gmat.unsw.edu.au/snap/gps/clynch_pdfs/coordcvt.pdf (page 5)
//! \sa http://en.wikipedia.org/wiki/Geodetic_datum#Vertical_datum //! \sa http://en.wikipedia.org/wiki/Geodetic_datum#Vertical_datum
@@ -61,10 +64,15 @@ namespace BlackMisc
virtual CLongitude longitude() const = 0; virtual CLongitude longitude() const = 0;
//! Height, ellipsoidal or geodetic height (used in GPS) //! Height, ellipsoidal or geodetic height (used in GPS)
//! This is approximately MSL (orthometric) height, aka elevation. //!
//! This is approximately MSL (orthometric) height, aka altitude, aka elevation.
//! The terms "geodetic height", "altitude", and "elevation" are interchangable.
//! "Geodetic height" is the generic, context-free term for the vertical component of a position.
//! This is commonly called "altitude" for objects that can move freely in the vertical component.
//! By a similar convention, "elevation" is commonly used for objects that are fixed to the ground.
//! \sa see http://www.gmat.unsw.edu.au/snap/gps/clynch_pdfs/coordcvt.pdf page 5 //! \sa see http://www.gmat.unsw.edu.au/snap/gps/clynch_pdfs/coordcvt.pdf page 5
//! \sa http://www.esri.com/news/arcuser/0703/geoid1of3.html //! \sa http://www.esri.com/news/arcuser/0703/geoid1of3.html
virtual const BlackMisc::PhysicalQuantities::CLength &geodeticHeight() const = 0; virtual const BlackMisc::Aviation::CAltitude &geodeticHeight() const = 0;
//! Normal vector //! Normal vector
//! \note QVector3D uses floats, so don't use if double precision is needed //! \note QVector3D uses floats, so don't use if double precision is needed
@@ -180,7 +188,7 @@ 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 geodeticHeight); CCoordinateGeodetic(CLatitude latitude, CLongitude longitude, BlackMisc::Aviation::CAltitude geodeticHeight);
//! Constructor by double values, but no geodetic height //! Constructor by double values, but no geodetic height
CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees); CCoordinateGeodetic(double latitudeDegrees, double longitudeDegrees);
@@ -195,7 +203,7 @@ namespace BlackMisc
virtual CLongitude longitude() const override; virtual CLongitude longitude() const override;
//! \copydoc ICoordinateGeodetic::geodeticHeight //! \copydoc ICoordinateGeodetic::geodeticHeight
virtual const BlackMisc::PhysicalQuantities::CLength &geodeticHeight() const override { return this->m_geodeticHeight; } virtual const BlackMisc::Aviation::CAltitude &geodeticHeight() const override { return this->m_geodeticHeight; }
//! \copydoc ICoordinateGeodetic::normalVector //! \copydoc ICoordinateGeodetic::normalVector
virtual QVector3D normalVector() const override; virtual QVector3D normalVector() const override;
@@ -222,7 +230,7 @@ namespace BlackMisc
void setLatLong(const CLatitude &latitude, const CLongitude &longitude); void setLatLong(const CLatitude &latitude, const CLongitude &longitude);
//! Set height (ellipsoidal or geodetic height) //! Set height (ellipsoidal or geodetic height)
void setGeodeticHeight(const BlackMisc::PhysicalQuantities::CLength &height) { this->m_geodeticHeight = height; } void setGeodeticHeight(const BlackMisc::Aviation::CAltitude &height) { this->m_geodeticHeight = height; }
//! Set normal vector //! Set normal vector
void setNormalVector(const QVector3D &normal) { this->m_x = normal.x(); this->m_y = normal.y(); this->m_z = normal.z(); } void setNormalVector(const QVector3D &normal) { this->m_x = normal.x(); this->m_y = normal.y(); this->m_z = normal.z(); }
@@ -231,7 +239,7 @@ namespace BlackMisc
void setNormalVector(double x, double y, double z) { this->m_x = x; this->m_y = y; this->m_z = z; } void setNormalVector(double x, double y, double z) { this->m_x = x; this->m_y = y; this->m_z = z; }
//! Coordinate by WGS84 position data //! Coordinate by WGS84 position data
static CCoordinateGeodetic fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const BlackMisc::PhysicalQuantities::CLength &geodeticHeight = {}); static CCoordinateGeodetic fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const BlackMisc::Aviation::CAltitude &geodeticHeight = {});
//! \copydoc BlackMisc::Mixin::String::toQString //! \copydoc BlackMisc::Mixin::String::toQString
QString convertToQString(bool i18n = false) const; QString convertToQString(bool i18n = false) const;
@@ -240,7 +248,7 @@ namespace BlackMisc
double m_x = 0; //!< normal vector double m_x = 0; //!< normal vector
double m_y = 0; //!< normal vector double m_y = 0; //!< normal vector
double m_z = 0; //!< normal vector double m_z = 0; //!< normal vector
BlackMisc::PhysicalQuantities::CLength m_geodeticHeight { 0, nullptr }; //!< height, ellipsoidal or geodetic height BlackMisc::Aviation::CAltitude m_geodeticHeight { 0, nullptr }; //!< height, ellipsoidal or geodetic height
BLACK_METACLASS( BLACK_METACLASS(
CCoordinateGeodetic, CCoordinateGeodetic,

View File

@@ -195,7 +195,7 @@ namespace BlackMisc
virtual BlackMisc::Geo::CLongitude longitude() const override { return this->m_situation.longitude(); } virtual BlackMisc::Geo::CLongitude longitude() const override { return this->m_situation.longitude(); }
//! \copydoc BlackMisc::Geo::ICoordinateGeodetic::geodeticHeight //! \copydoc BlackMisc::Geo::ICoordinateGeodetic::geodeticHeight
const BlackMisc::PhysicalQuantities::CLength &geodeticHeight() const override { return this->m_situation.geodeticHeight(); } const BlackMisc::Aviation::CAltitude &geodeticHeight() const override { return this->m_situation.geodeticHeight(); }
//! \copydoc BlackMisc::Geo::ICoordinateGeodetic::normalVector //! \copydoc BlackMisc::Geo::ICoordinateGeodetic::normalVector
virtual QVector3D normalVector() const override { return this->m_situation.normalVector(); } virtual QVector3D normalVector() const override { return this->m_situation.normalVector(); }

View File

@@ -57,7 +57,7 @@ namespace BlackMisc
virtual Geo::CLatitude latitude() const override { return m_position.latitude(); } virtual Geo::CLatitude latitude() const override { return m_position.latitude(); }
virtual Geo::CLongitude longitude() const override { return m_position.longitude(); } virtual Geo::CLongitude longitude() const override { return m_position.longitude(); }
virtual const PhysicalQuantities::CLength &geodeticHeight() const override { return m_position.geodeticHeight(); } virtual const Aviation::CAltitude &geodeticHeight() const override { return m_position.geodeticHeight(); }
virtual QVector3D normalVector() const override { return m_position.normalVector(); } virtual QVector3D normalVector() const override { return m_position.normalVector(); }
virtual std::array<double, 3> normalVectorDouble() const override { return this->m_position.normalVectorDouble(); } virtual std::array<double, 3> normalVectorDouble() const override { return this->m_position.normalVectorDouble(); }

View File

@@ -27,6 +27,7 @@
#include <tuple> #include <tuple>
using namespace BlackMisc; using namespace BlackMisc;
using namespace BlackMisc::Aviation;
using namespace BlackMisc::Geo; using namespace BlackMisc::Geo;
using namespace BlackMisc::Network; using namespace BlackMisc::Network;
using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
@@ -49,7 +50,7 @@ namespace BlackMisc
{ {
// from WGS is slow, so static const (only 1 time init) // from WGS is slow, so static const (only 1 time init)
// https://dev.vatsim-germany.org/issues/322#note-2 // https://dev.vatsim-germany.org/issues/322#note-2
static const CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(index, CLengthUnit::ft())); static const CCoordinateGeodetic geoPos = CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CAltitude(index, CLengthUnit::ft()));
QString cs = QString("%1_TWR").arg(index); QString cs = QString("%1_TWR").arg(index);
QString usr = QString("Joe %1").arg(index); QString usr = QString("Joe %1").arg(index);
QString id = QString("00000%1").arg(index).right(6); QString id = QString("00000%1").arg(index).right(6);
@@ -164,11 +165,11 @@ namespace BlackMisc
); );
CCoordinateGeodetic c; CCoordinateGeodetic c;
const CLength h(333, CLengthUnit::m()); const CAltitude a(333, CLengthUnit::m());
for (int i = 0; i < times; i++) for (int i = 0; i < times; i++)
{ {
int idx = (i % 5) * 2; int idx = (i % 5) * 2;
c = CCoordinateGeodetic::fromWgs84(wgsLatLng.at(idx), wgsLatLng.at(idx + 1), h); c = CCoordinateGeodetic::fromWgs84(wgsLatLng.at(idx), wgsLatLng.at(idx + 1), a);
} }
} }
} // namespace } // namespace

View File

@@ -350,7 +350,7 @@ namespace BlackSimPlugin
CCoordinateGeodetic position = situation.getPosition(); CCoordinateGeodetic position = situation.getPosition();
CLatitude lat(latitudeRaw * latCorrectionFactor, CAngleUnit::deg()); CLatitude lat(latitudeRaw * latCorrectionFactor, CAngleUnit::deg());
CLongitude lon(longitudeRaw * lonCorrectionFactor, CAngleUnit::deg()); CLongitude lon(longitudeRaw * lonCorrectionFactor, CAngleUnit::deg());
CLength groundAltitude(groundAltitudeRaw / 256.0, CLengthUnit::m()); CAltitude groundAltitude(groundAltitudeRaw / 256.0, CLengthUnit::m());
position.setLatitude(lat); position.setLatitude(lat);
position.setLongitude(lon); position.setLongitude(lon);
position.setGeodeticHeight(groundAltitude); position.setGeodeticHeight(groundAltitude);

View File

@@ -364,7 +364,7 @@ namespace BlackSimPlugin
using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::PhysicalQuantities;
using namespace BlackMisc::Geo; using namespace BlackMisc::Geo;
m_airportsInRange.push_back({ *icaoIt, { CLatitude(*latIt, CAngleUnit::deg()), CLongitude(*lonIt, CAngleUnit::deg()), CLength(*altIt, CLengthUnit::ft()) }, *nameIt }); m_airportsInRange.push_back({ *icaoIt, { CLatitude(*latIt, CAngleUnit::deg()), CLongitude(*lonIt, CAngleUnit::deg()), CAltitude(*altIt, CLengthUnit::ft()) }, *nameIt });
} }
} }

View File

@@ -58,7 +58,7 @@ void SwiftGuiStd::setTestPosition(const QString &wgsLatitude, const QString &wgs
CCoordinateGeodetic coordinate( CCoordinateGeodetic coordinate(
CLatitude::fromWgs84(wgsLatitude), CLatitude::fromWgs84(wgsLatitude),
CLongitude::fromWgs84(wgsLongitude), CLongitude::fromWgs84(wgsLongitude),
CLength(0, CLengthUnit::m())); CAltitude(0, CLengthUnit::m()));
this->m_ownAircraft.setPosition(coordinate); this->m_ownAircraft.setPosition(coordinate);
this->m_ownAircraft.setAltitude(altitude); this->m_ownAircraft.setAltitude(altitude);

View File

@@ -135,7 +135,7 @@ namespace BlackCoreTest
QVERIFY2(heathrow[0].isOperating(), "Wrong airport data"); QVERIFY2(heathrow[0].isOperating(), "Wrong airport data");
auto airports = m_airportReader->getAirports(); auto airports = m_airportReader->getAirports();
airports.sortByRange(CCoordinateGeodetic(CLatitude(51.5085300, CAngleUnit::deg()), CLongitude(-0.1257400, CAngleUnit::deg()), CLength()), true); airports.sortByRange(CCoordinateGeodetic(CLatitude(51.5085300, CAngleUnit::deg()), CLongitude(-0.1257400, CAngleUnit::deg()), CAltitude()), true);
QVERIFY2(airports[0].getIcao() == CAirportIcaoCode("EGLW"), "Wrong airport data"); QVERIFY2(airports[0].getIcao() == CAirportIcaoCode("EGLW"), "Wrong airport data");
CApplication::processEventsFor(2500); // make sure events are processed CApplication::processEventsFor(2500); // make sure events are processed

View File

@@ -49,7 +49,7 @@ namespace BlackMiscTest
QDateTime dtFrom2 = dtUntil; QDateTime dtFrom2 = dtUntil;
QDateTime dtUntil2 = dtUntil.addSecs(60 * 60); QDateTime dtUntil2 = dtUntil.addSecs(60 * 60);
CCoordinateGeodetic geoPos = CCoordinateGeodetic geoPos =
CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() });
CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"), CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"),
CFrequency(118.7, CFrequencyUnit::MHz()), CFrequency(118.7, CFrequencyUnit::MHz()),
geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil); geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil);
@@ -98,7 +98,7 @@ namespace BlackMiscTest
QDateTime dtFrom = QDateTime::currentDateTimeUtc(); QDateTime dtFrom = QDateTime::currentDateTimeUtc();
QDateTime dtUntil = dtFrom.addSecs(60 * 60); // 1 hour QDateTime dtUntil = dtFrom.addSecs(60 * 60); // 1 hour
CCoordinateGeodetic geoPos = CCoordinateGeodetic geoPos =
CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", CLength(1487, CLengthUnit::ft())); CCoordinateGeodetic::fromWgs84("48° 21 13″ N", "11° 47 09″ E", { 1487, CLengthUnit::ft() });
CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"), CAtcStation station1(CCallsign("eddm_twr"), CUser("123456", "Joe Doe"),
CFrequency(118.7, CFrequencyUnit::MHz()), CFrequency(118.7, CFrequencyUnit::MHz()),
geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil); geoPos, CLength(50, CLengthUnit::km()), false, dtFrom, dtUntil);