swift
samplesgeo.cpp
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2015 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
6 
7 #include "samplesgeo.h"
8 
9 #include <QString>
10 #include <QTextStream>
11 #include <QVector3D>
12 
13 #include "misc/aviation/altitude.h"
15 #include "misc/geo/earthangle.h"
16 #include "misc/geo/latitude.h"
17 #include "misc/geo/longitude.h"
19 #include "misc/pq/units.h"
20 #include "misc/stringutils.h"
21 
22 using namespace swift::misc;
23 using namespace swift::misc::aviation;
24 using namespace swift::misc::physical_quantities;
25 using namespace swift::misc::geo;
26 
27 namespace swift::sample
28 {
29  int CSamplesGeo::samples(QTextStream &out)
30  {
31  // comparions https://www.fcc.gov/general/degrees-minutes-seconds-tofrom-decimal-degrees
32  const int digits = 12;
33  const QString latStr("N 48° 7′ 6.3588"); // 48.118433
34  const QString lngStr("E 16° 33′ 39.924");
35  out.setRealNumberPrecision(digits);
37  CCoordinateGeodetic::fromWgs84(latStr, lngStr, CAltitude(100, CAltitude::MeanSeaLevel, CLengthUnit::m()));
38  CLatitude lat = CLatitude::fromWgs84(latStr);
39  CLongitude lng = CLongitude::fromWgs84(lngStr);
40 
41  // check if conversions to xyz have messed something up
42  CLatitude deltaLat = geo.latitude() - lat;
43  CLongitude deltaLng = geo.longitude() - lng;
44 
45  out << latStr << " " << lngStr << Qt::endl;
46  out << lat.value(CAngleUnit::deg()) << " " << lat.value(CAngleUnit::sexagesimalDeg()) << " "
47  << lng.value(CAngleUnit::deg()) << " " << lng.value(CAngleUnit::sexagesimalDeg()) << Qt::endl;
48  out << geo.latitude().value(CAngleUnit::deg()) << " " << geo.latitude().value(CAngleUnit::sexagesimalDeg())
49  << " " << geo.longitude().value(CAngleUnit::deg()) << " "
50  << geo.longitude().value(CAngleUnit::sexagesimalDeg()) << Qt::endl;
51 
52  out << deltaLat.valueRoundedWithUnit(digits) << " " << deltaLng.valueRoundedWithUnit(digits) << Qt::endl;
53 
54  // equal test
55  out << "Equal? " << swift::misc::boolToYesNo(lat == geo.latitude()) << " "
56  << swift::misc::boolToYesNo(lng == geo.longitude()) << Qt::endl;
57 
58  // check if conversions to xyz have messed something up
59  QVector3D geoVector = geo.normalVector();
60  CCoordinateGeodetic geo2(geoVector);
61  deltaLat = geo2.latitude() - lat;
62  deltaLng = geo2.longitude() - lng;
63  out << deltaLat.valueRoundedWithUnit(digits) << " " << deltaLng.valueRoundedWithUnit(digits) << Qt::endl;
64 
65  // Heading/bearing of same values
66  CAngle bearing = geo.calculateBearing(geo);
67  CLength distance = geo.calculateGreatCircleDistance(geo);
68  out << bearing.valueRoundedWithUnit(CAngleUnit::deg(), 2) << " "
69  << distance.valueRoundedWithUnit(CLengthUnit::m(), 2) << Qt::endl;
70 
71  const CCoordinateGeodetic nullCoordinate;
72  bearing = geo.calculateBearing(nullCoordinate);
73  distance = geo.calculateGreatCircleDistance(nullCoordinate);
74  out << bearing.valueRoundedWithUnit(CAngleUnit::deg(), 2) << " "
75  << distance.valueRoundedWithUnit(CLengthUnit::m(), 2) << Qt::endl;
76 
77  // bye
78  out << "-----------------------------------------------" << Qt::endl;
79  return 0;
80  }
81 } // namespace swift::sample
Altitude as used in aviation, can be AGL or MSL altitude.
Definition: altitude.h:52
virtual CLatitude latitude() const
Latitude.
virtual QVector3D normalVector() const
Normal vector.
virtual CLongitude longitude() const
Longitude.
physical_quantities::CLength calculateGreatCircleDistance(const ICoordinateGeodetic &otherCoordinate) const
Great circle distance.
physical_quantities::CAngle calculateBearing(const ICoordinateGeodetic &otherCoordinate) const
Initial bearing.
Physical unit angle (radians, degrees)
Definition: angle.h:23
Physical unit length (length)
Definition: length.h:18
double value(MU unit) const
Value in given unit.
QString valueRoundedWithUnit(const MU &unit, int digits=-1, bool withGroupSeparator=false, bool i18n=false) const
Value to QString with the given unit, e.g. "5.00m".
Free functions in swift::misc.
SWIFT_MISC_EXPORT const QString & boolToYesNo(bool v)
Bool to yes/no.