digiKam
Loading...
Searching...
No Matches
gpsdatacontainer.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2010-04-19
7 * Description : A class to hold the GPS related data
8 *
9 * SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2010-2014 by Michael G. Hansen <mike at mghansen dot de>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Local includes
19
20#include "geocoordinates.h"
21
22namespace Digikam
23{
24
26{
27public:
28
39 Q_DECLARE_FLAGS(HasFlags, HasFlagsEnum)
40
41public:
42
43 GPSDataContainer() = default;
44
45private:
46
47 HasFlags m_hasFlags = HasFlags();
48 GeoCoordinates m_coordinates;
49 int m_nSatellites = -1;
50 qreal m_dop = -1.0;
51 int m_fixType = -1;
52 qreal m_speed = 0.0;
53
54public:
55
56 // general
57
58 bool operator==(const GPSDataContainer& b) const
59 {
60 if (m_hasFlags != b.m_hasFlags)
61 {
62 return false;
63 }
64
65 if (m_hasFlags.testFlag(HasCoordinates))
66 {
67 if (!(m_coordinates == b.m_coordinates))
68 {
69 return false;
70 }
71 }
72
73 if (hasNSatellites())
74 {
75 if (m_nSatellites != b.m_nSatellites)
76 {
77 return false;
78 }
79 }
80
81 if (hasDop())
82 {
83 if (m_dop != b.m_dop)
84 {
85 return false;
86 }
87 }
88
89 if (hasFixType())
90 {
91 if (m_fixType != b.m_fixType)
92 {
93 return false;
94 }
95 }
96
97 if (hasSpeed())
98 {
99 if (m_speed != b.m_speed)
100 {
101 return false;
102 }
103 }
104
105 return true;
106 }
107
108 inline HasFlags flags() const
109 {
110 return m_hasFlags;
111 }
112
113 inline void clear()
114 {
115 m_hasFlags = HasFlags();
116 m_coordinates.clear();
117 }
118
120 {
121 m_hasFlags&= ~(HasNSatellites | HasDop | HasFixType | HasSpeed);
122 }
123
124 // coordinates
125
127 {
128 return m_coordinates;
129 }
130
131 inline void setCoordinates(const GeoCoordinates& coordinates)
132 {
133 m_coordinates = coordinates;
134
135 if (coordinates.hasCoordinates())
136 {
137 m_hasFlags |= HasCoordinates;
138 }
139 else
140 {
141 m_hasFlags &= ~HasCoordinates;
142 }
143
144 if (coordinates.hasAltitude())
145 {
146 m_hasFlags |= HasAltitude;
147 }
148 else
149 {
150 m_hasFlags &= ~HasAltitude;
151 }
152
154 }
155
156 inline void setAltitude(const qreal alt)
157 {
158 m_coordinates.setAlt(alt);
159 m_hasFlags |= HasAltitude;
160 }
161
162 inline bool hasAltitude() const
163 {
164 return m_hasFlags.testFlag(HasAltitude);
165 }
166
167 inline void setLatLon(const qreal lat, const qreal lon)
168 {
169 m_coordinates.setLatLon(lat, lon);
170 m_hasFlags |= HasCoordinates;
171
173 }
174
175 inline void clearAltitude()
176 {
177 m_hasFlags &= ~HasAltitude;
178 m_coordinates.clearAlt();
179 }
180
181 inline bool hasCoordinates() const
182 {
183 return m_hasFlags.testFlag(HasCoordinates);
184 }
185
186 // NSatellites
187
188 inline int getNSatellites() const
189 {
190 return m_nSatellites;
191 }
192
193 inline bool hasNSatellites() const
194 {
195 return m_hasFlags.testFlag(HasNSatellites);
196 }
197
198 inline void clearNSatellites()
199 {
200 m_hasFlags &= ~HasNSatellites;
201 }
202
203 inline void setNSatellites(const int nSatellites)
204 {
205 m_nSatellites = nSatellites;
206 m_hasFlags |= HasNSatellites;
207 }
208
209 // DOP
210
211 inline bool hasDop() const
212 {
213 return m_hasFlags.testFlag(HasDop);
214 }
215
216 inline void clearDop()
217 {
218 m_hasFlags &= ~HasDop;
219 }
220
221 inline void setDop(const qreal dop)
222 {
223 m_dop = dop;
224 m_hasFlags |= HasDop;
225 }
226
227 inline qreal getDop() const
228 {
229 return m_dop;
230 }
231
232 // fix type
233
234 inline bool hasFixType() const
235 {
236 return m_hasFlags.testFlag(HasFixType);
237 }
238
239 inline void setFixType(const int fixType)
240 {
241 m_fixType = fixType;
242 m_hasFlags |= HasFixType;
243 }
244
245 inline qreal getFixType() const
246 {
247 return m_fixType;
248 }
249
250 inline void clearFixType()
251 {
252 m_hasFlags &= ~HasFixType;
253 }
254
255 // speed
256
260 inline qreal getSpeed() const
261 {
262 return m_speed;
263 }
264
265 inline bool hasSpeed() const
266 {
267 return m_hasFlags.testFlag(HasSpeed);
268 }
269
273 inline void setSpeed(const qreal speed)
274 {
275 m_hasFlags |= HasSpeed;
276 m_speed = speed;
277 }
278
279 inline void clearSpeed()
280 {
281 m_hasFlags &= ~HasSpeed;
282 }
283};
284
285} // namespace Digikam
286
287Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::GPSDataContainer::HasFlags)
Definition gpsdatacontainer.h:26
void setLatLon(const qreal lat, const qreal lon)
Definition gpsdatacontainer.h:167
bool hasCoordinates() const
Definition gpsdatacontainer.h:181
qreal getDop() const
Definition gpsdatacontainer.h:227
void clearDop()
Definition gpsdatacontainer.h:216
void clearSpeed()
Definition gpsdatacontainer.h:279
void clearFixType()
Definition gpsdatacontainer.h:250
bool hasNSatellites() const
Definition gpsdatacontainer.h:193
bool hasDop() const
Definition gpsdatacontainer.h:211
bool operator==(const GPSDataContainer &b) const
Definition gpsdatacontainer.h:58
HasFlags flags() const
Definition gpsdatacontainer.h:108
GeoCoordinates getCoordinates() const
Definition gpsdatacontainer.h:126
qreal getSpeed() const
Return the speed in m/s.
Definition gpsdatacontainer.h:260
bool hasSpeed() const
Definition gpsdatacontainer.h:265
void clear()
Definition gpsdatacontainer.h:113
bool hasFixType() const
Definition gpsdatacontainer.h:234
void setFixType(const int fixType)
Definition gpsdatacontainer.h:239
void setNSatellites(const int nSatellites)
Definition gpsdatacontainer.h:203
HasFlagsEnum
Definition gpsdatacontainer.h:30
@ HasSpeed
Definition gpsdatacontainer.h:37
@ HasFixType
Definition gpsdatacontainer.h:36
@ HasDop
Definition gpsdatacontainer.h:35
@ HasAltitude
Definition gpsdatacontainer.h:32
@ HasNSatellites
Definition gpsdatacontainer.h:34
@ HasCoordinates
Definition gpsdatacontainer.h:31
@ HasIsInterpolated
Definition gpsdatacontainer.h:33
void setAltitude(const qreal alt)
Definition gpsdatacontainer.h:156
void clearNSatellites()
Definition gpsdatacontainer.h:198
bool hasAltitude() const
Definition gpsdatacontainer.h:162
void clearAltitude()
Definition gpsdatacontainer.h:175
void setDop(const qreal dop)
Definition gpsdatacontainer.h:221
void setCoordinates(const GeoCoordinates &coordinates)
Definition gpsdatacontainer.h:131
void clearNonCoordinates()
Definition gpsdatacontainer.h:119
void setSpeed(const qreal speed)
Set the speed in m/s.
Definition gpsdatacontainer.h:273
int getNSatellites() const
Definition gpsdatacontainer.h:188
qreal getFixType() const
Definition gpsdatacontainer.h:245
Definition geocoordinates.h:44
void clear()
Definition geocoordinates.cpp:118
bool hasAltitude() const
Definition geocoordinates.cpp:97
void setAlt(const double inAlt)
Definition geocoordinates.cpp:107
void setLatLon(const double inLat, const double inLon)
Definition geocoordinates.cpp:89
void clearAlt()
Definition geocoordinates.cpp:113
bool hasCoordinates() const
Definition geocoordinates.cpp:74
Definition datefolderview.cpp:34