Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qdeclarativeposition.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 Jolla Ltd.
2// Copyright (C) 2016 The Qt Company Ltd.
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#include <QtCore/QtNumeric>
7#include <QtQml/qqml.h>
9#include <QFile>
10
12
16
48namespace
49{
50
52{
53 return a == b || (qIsNaN(a) && qIsNaN(b));
54}
55
57{
58 return qIsNaN(a) != qIsNaN(b);
59}
60
61}
62
67
71
73{
74 // timestamp
75 const QDateTime pTimestamp = m_info.timestamp();
76 const QDateTime timestamp = info.timestamp();
77 const bool timestampChanged = pTimestamp != timestamp;
78
79 // coordinate
80 const QGeoCoordinate pCoordinate = m_info.coordinate();
81 const QGeoCoordinate coordinate = info.coordinate();
82 const bool coordinateChanged = pCoordinate != coordinate;
83 const bool latitudeValidChanged = exclusiveNaN(pCoordinate.latitude(), coordinate.latitude());
84 const bool longitudeValidChanged =
85 exclusiveNaN(pCoordinate.longitude(), coordinate.longitude());
86 const bool altitudeValidChanged = exclusiveNaN(pCoordinate.altitude(), coordinate.altitude());
87
88 // direction
89 const qreal pDirection = m_info.attribute(QGeoPositionInfo::Direction);
91 const bool directionChanged = !equalOrNaN(pDirection, direction);
92 const bool directionValidChanged = exclusiveNaN(pDirection, direction);
93
94 // ground speed
95 const qreal pSpeed = m_info.attribute(QGeoPositionInfo::GroundSpeed);
97 const bool speedChanged = !equalOrNaN(pSpeed, speed);
98 const bool speedValidChanged = exclusiveNaN(pSpeed, speed);
99
100 // vertical speed
101 const qreal pVerticalSpeed = m_info.attribute(QGeoPositionInfo::VerticalSpeed);
103 const bool verticalSpeedChanged = !equalOrNaN(pVerticalSpeed, verticalSpeed);
104 const bool verticalSpeedValidChanged = exclusiveNaN(pVerticalSpeed, verticalSpeed);
105
106 // magnetic variation
107 const qreal pMagneticVariation = m_info.attribute(QGeoPositionInfo::MagneticVariation);
109 const bool magneticVariationChanged = !equalOrNaN(pMagneticVariation, magneticVariation);
110 const bool magneticVariationValidChanged = exclusiveNaN(pMagneticVariation, magneticVariation);
111
112 // horizontal accuracy
113 const qreal pHorizontalAccuracy = m_info.attribute(QGeoPositionInfo::HorizontalAccuracy);
115 const bool horizontalAccuracyChanged = !equalOrNaN(pHorizontalAccuracy, horizontalAccuracy);
116 const bool horizontalAccuracyValidChanged =
117 exclusiveNaN(pHorizontalAccuracy, horizontalAccuracy);
118
119 // vertical accuracy
120 const qreal pVerticalAccuracy = m_info.attribute(QGeoPositionInfo::VerticalAccuracy);
122 const bool verticalAccuracyChanged = !equalOrNaN(pVerticalAccuracy, verticalAccuracy);
123 const bool verticalAccuracyValidChanged = exclusiveNaN(pVerticalAccuracy, verticalAccuracy);
124
125 // direction accuracy
126 const qreal pDirectionAccuracy = m_info.attribute(QGeoPositionInfo::DirectionAccuracy);
128 const bool directionAccuracyChanged = !equalOrNaN(pDirectionAccuracy, directionAccuracy);
129 const bool directionAccuracyValidChanged = exclusiveNaN(pDirectionAccuracy, directionAccuracy);
130
131 m_info = info;
132
133 if (timestampChanged)
134 m_computedTimestamp.notify();
135
136 if (coordinateChanged)
137 m_computedCoordinate.notify();
138 if (latitudeValidChanged)
139 m_computedLatitudeValid.notify();
140 if (longitudeValidChanged)
141 m_computedLongitudeValid.notify();
142 if (altitudeValidChanged)
143 m_computedAltitudeValid.notify();
144
145 if (directionChanged)
146 m_computedDirection.notify();
147 if (directionValidChanged)
148 m_computedDirectionValid.notify();
149
150 if (speedChanged)
151 m_computedSpeed.notify();
152 if (speedValidChanged)
153 m_computedSpeedValid.notify();
154
155 if (verticalSpeedChanged)
156 m_computedVerticalSpeed.notify();
157 if (verticalSpeedValidChanged)
158 m_computedVerticalSpeedValid.notify();
159
160 if (horizontalAccuracyChanged)
161 m_computedHorizontalAccuracy.notify();
162 if (horizontalAccuracyValidChanged)
163 m_computedHorizontalAccuracyValid.notify();
164
165 if (verticalAccuracyChanged)
166 m_computedVerticalAccuracy.notify();
167 if (verticalAccuracyValidChanged)
168 m_computedVerticalAccuracyValid.notify();
169
170 if (magneticVariationChanged)
171 m_computedMagneticVariation.notify();
172 if (magneticVariationValidChanged)
173 m_computedMagneticVariationValid.notify();
174
175 if (directionAccuracyChanged)
176 m_computedDirectionAccuracy.notify();
177 if (directionAccuracyValidChanged)
178 m_computedDirectionAccuracyValid.notify();
179}
180
182{
183 return m_info;
184}
185
187{
188 return QBindable<bool>(&m_computedLatitudeValid);
189}
190
192{
193 return QBindable<bool>(&m_computedLongitudeValid);
194}
195
197{
198 return QBindable<bool>(&m_computedAltitudeValid);
199}
200
201QBindable<QGeoCoordinate> QDeclarativePosition::bindableCoordinate() const
202{
203 return QBindable<QGeoCoordinate>(&m_computedCoordinate);
204}
205
206QBindable<QDateTime> QDeclarativePosition::bindableTimestamp() const
207{
208 return QBindable<QDateTime>(&m_computedTimestamp);
209}
210
211QBindable<double> QDeclarativePosition::bindableSpeed() const
212{
213 return QBindable<double>(&m_computedSpeed);
214}
215
217{
218 return QBindable<bool>(&m_computedSpeedValid);
219}
220
222{
223 return QBindable<qreal>(&m_computedHorizontalAccuracy);
224}
225
227{
228 return QBindable<qreal>(&m_computedVerticalAccuracy);
229}
230
232{
233 return QBindable<bool>(&m_computedHorizontalAccuracyValid);
234}
235
237{
238 return QBindable<bool>(&m_computedVerticalAccuracyValid);
239}
240
242{
243 return QBindable<bool>(&m_computedDirectionValid);
244}
245
247{
248 return QBindable<double>(&m_computedDirection);
249}
250
252{
253 return QBindable<bool>(&m_computedVerticalSpeedValid);
254}
255
257{
258 return QBindable<double>(&m_computedVerticalSpeed);
259}
260
262{
263 return QBindable<double>(&m_computedMagneticVariation);
264}
265
267{
268 return QBindable<bool>(&m_computedMagneticVariationValid);
269}
270
272{
273 return QBindable<double>(&m_computedDirectionAccuracy);
274}
275
277{
278 return QBindable<bool>(&m_computedDirectionAccuracyValid);
279}
280
291{
292 return m_computedCoordinate.value();
293}
294
295QGeoCoordinate QDeclarativePosition::coordinateActualCalculation() const
296{
297 return m_info.coordinate();
298}
299
310{
311 return m_computedLatitudeValid.value();
312}
313
314bool QDeclarativePosition::isLatitudeValidActualCalculation() const
315{
316 return !qIsNaN(m_info.coordinate().latitude());
317}
318
329{
330 return m_computedLongitudeValid.value();
331}
332
333bool QDeclarativePosition::isLongitudeValidActualCalculation() const
334{
335 return !qIsNaN(m_info.coordinate().longitude());
336}
337
348{
349 return m_computedSpeedValid.value();
350}
351
352bool QDeclarativePosition::isSpeedValidActualCalculation() const
353{
355}
356
367{
368 return m_computedAltitudeValid.value();
369}
370
371bool QDeclarativePosition::isAltitudeValidActualCalculation() const
372{
373 return !qIsNaN(m_info.coordinate().altitude());
374}
375
386{
387 return m_computedSpeed.value();
388}
389
390double QDeclarativePosition::speedActualCalculation() const
391{
393}
394
403{
404 return m_computedHorizontalAccuracy.value();
405}
406
407qreal QDeclarativePosition::horizontalAccuracyActualCalculation() const
408{
410}
411
422{
423 return m_computedHorizontalAccuracyValid.value();
424}
425
426bool QDeclarativePosition::isHorizontalAccuracyValidActualCalculation() const
427{
429}
430
439{
440 return m_computedVerticalAccuracy.value();
441}
442
443qreal QDeclarativePosition::verticalAccuracyActualCalculation() const
444{
446}
447
458{
459 return m_computedVerticalAccuracyValid.value();
460}
461
462bool QDeclarativePosition::isVerticalAccuracyValidActualCalculation() const
463{
465}
466
476{
477 return m_computedTimestamp.value();
478}
479
480QDateTime QDeclarativePosition::timestampActualCalculation() const
481{
482 return m_info.timestamp();
483}
484
495{
496 return m_computedDirectionValid.value();
497}
498
499bool QDeclarativePosition::isDirectionValidActualCalculation() const
500{
502}
503
515{
516 return m_computedDirection.value();
517}
518
519double QDeclarativePosition::directionActualCalculation() const
520{
522}
523
534{
535 return m_computedVerticalSpeedValid.value();
536}
537
538bool QDeclarativePosition::isVerticalSpeedValidActualCalculation() const
539{
541}
542
554{
555 return m_computedVerticalSpeed.value();
556}
557
558double QDeclarativePosition::verticalSpeedActualCalculation() const
559{
561}
562
573{
574 return m_computedMagneticVariationValid.value();
575}
576
577bool QDeclarativePosition::isMagneticVariationValidActualCalculation() const
578{
580}
581
596{
597 return m_computedMagneticVariation.value();
598}
599
600double QDeclarativePosition::magneticVariationActualCalculation() const
601{
603}
604
614{
615 return m_computedDirectionAccuracyValid.value();
616}
617
618bool QDeclarativePosition::isDirectionAccuracyValidActualCalculation() const
619{
621}
622
634{
635 return m_computedDirectionAccuracy.value();
636}
637
638double QDeclarativePosition::directionAccuracyActualCalculation() const
639{
641}
642
644
645#include "moc_qdeclarativeposition_p.cpp"
\inmodule QtCore\reentrant
Definition qdatetime.h:283
QBindable< bool > bindableLongitudeValid() const
bool isLongitudeValid() const
\qmlproperty bool Position::longitudeValid
QBindable< double > bindableMagneticVariation() const
const QGeoPositionInfo & position() const
QBindable< bool > bindableLatitudeValid() const
bool isVerticalAccuracyValid() const
\qmlproperty bool Position::verticalAccuracyValid
QBindable< double > bindableDirectionAccuracy() const
bool isVerticalSpeedValid() const
\qmlproperty bool Position::verticalSpeedValid
QBindable< bool > bindableSpeedValid() const
bool isDirectionAccuracyValid() const
\qmlproperty bool Position::directionAccuracyValid
QBindable< bool > bindableHorizontalAccuracyValid() const
QBindable< bool > bindableAltitudeValid() const
bool isLatitudeValid() const
\qmlproperty bool Position::latitudeValid
QBindable< bool > bindableVerticalAccuracyValid() const
QBindable< qreal > bindableHorizontalAccuracy() const
bool isMagneticVariationValid() const
\qmlproperty bool Position::magneticVariationValid
bool isSpeedValid() const
\qmlproperty bool Position::speedValid
QBindable< double > bindableDirection() const
bool isAltitudeValid() const
\qmlproperty bool Position::altitudeValid
QBindable< bool > bindableDirectionValid() const
QBindable< QGeoCoordinate > bindableCoordinate() const
QBindable< QDateTime > bindableTimestamp() const
bool isDirectionValid() const
\qmlproperty bool Position::directionValid
QBindable< double > bindableVerticalSpeed() const
bool isHorizontalAccuracyValid() const
\qmlproperty bool Position::horizontalAccuracyValid
QBindable< bool > bindableVerticalSpeedValid() const
QBindable< qreal > binableVerticalAccuracy() const
QBindable< bool > bindableDirectionAccuracyValid() const
QBindable< bool > bindableMagneticVariationValid() const
QBindable< double > bindableSpeed() const
void setPosition(const QGeoPositionInfo &info)
QDeclarativePosition(QObject *parent=0)
\inmodule QtPositioning
double longitude
This property holds the longitude in decimal degrees.
double latitude
This property holds the latitude in decimal degrees.
double altitude
This property holds the altitude in meters above sea level.
\inmodule QtPositioning
qreal attribute(Attribute attribute) const
Returns the value of the specified attribute as a qreal value.
QGeoCoordinate coordinate() const
Returns the coordinate for this position.
QDateTime timestamp() const
Returns the date and time at which this position was reported, in UTC time.
\inmodule QtCore
Definition qobject.h:103
Combined button and popup list for selecting options.
bool equalOrNaN(qreal a, qreal b)
bool exclusiveNaN(qreal a, qreal b)
bool qIsNaN(qfloat16 f) noexcept
Definition qfloat16.h:284
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
double qreal
Definition qtypes.h:187
QHostInfo info
[0]