mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-27 11:05:44 +08:00
refs #837 ICoordinateGeodetic::geodeticHeight is a CAltitude.
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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()));
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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"));
|
||||||
|
|||||||
@@ -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(); }
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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()),
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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(); }
|
||||||
|
|||||||
@@ -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(); }
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user