swift
Loading...
Searching...
No Matches
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
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
22using namespace swift::misc;
23using namespace swift::misc::aviation;
24using namespace swift::misc::physical_quantities;
25using namespace swift::misc::geo;
26
27namespace swift::sample
28{
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);
38 CLatitude lat = CLatitude::fromWgs84(latStr);
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()) << " "
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
static CAngleUnit deg()
Degrees.
Definition units.h:276
static CAngleUnit sexagesimalDeg()
Sexagesimal degree (degrees, minutes, seconds, decimal seconds).
Definition units.h:285
Altitude as used in aviation, can be AGL or MSL altitude.
Definition altitude.h:52
static CCoordinateGeodetic fromWgs84(const QString &latitudeWgs84, const QString &longitudeWgs84, const aviation::CAltitude &geodeticHeight={})
Coordinate by WGS84 position data.
static CLatitude fromWgs84(const QString &wgsCoordinate)
Physical unit angle (radians, degrees).
Definition angle.h:23
Physical unit length (length).
Definition length.h:18
static CLengthUnit m()
Meter m.
Definition units.h:140
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".
static int samples(QTextStream &out)
Run the samples.
Free functions in swift::misc.
SWIFT_MISC_EXPORT const QString & boolToYesNo(bool v)
Bool to yes/no.
QTextStream & endl(QTextStream &stream)
void setRealNumberPrecision(int precision)