File indexing completed on 2024-04-28 15:39:05
0001 // SPDX-FileCopyrightText: 2020-2023 Tobias Leupold <tl at stonemx dot de> 0002 // 0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #ifndef GPXENGINE_H 0006 #define GPXENGINE_H 0007 0008 // Local includes 0009 #include "KGeoTag.h" 0010 #include "Coordinates.h" 0011 0012 // Qt includes 0013 #include <QObject> 0014 #include <QVector> 0015 #include <QHash> 0016 #include <QDateTime> 0017 #include <QImage> 0018 #include <QJsonObject> 0019 0020 // Local classes 0021 class GeoDataModel; 0022 0023 class GpxEngine : public QObject 0024 { 0025 Q_OBJECT 0026 0027 public: 0028 enum LoadResult { 0029 OpenFailed, 0030 XmlError, 0031 NoGpxElement, 0032 NoGeoData, 0033 AlreadyLoaded, 0034 Okay 0035 }; 0036 0037 struct LoadInfo 0038 { 0039 LoadResult result; 0040 int tracks = 0; 0041 int segments = 0; 0042 int points = 0; 0043 }; 0044 0045 explicit GpxEngine(QObject *parent, GeoDataModel *geoDataModel); 0046 GpxEngine::LoadInfo load(const QString &path); 0047 Coordinates findExactCoordinates(const QDateTime &time, int deviation) const; 0048 Coordinates findInterpolatedCoordinates(const QDateTime &time, int deviation) const; 0049 QPair<Coordinates, QDateTime> findClosestTrackPoint(QDateTime time, 0050 int cameraClockDeviation) const; 0051 void setMatchParameters(int exactMatchTolerance, int maximumInterpolationInterval, 0052 int maximumInterpolationDistance); 0053 QByteArray lastDetectedTimeZoneId() const; 0054 bool timeZoneDataLoaded() const; 0055 0056 private: // Functions 0057 Coordinates findExactCoordinates(const QDateTime &time) const; 0058 Coordinates findInterpolatedCoordinates(const QDateTime &time) const; 0059 0060 private: // Variables 0061 GeoDataModel *m_geoDataModel; 0062 0063 int m_exactMatchTolerance; 0064 int m_maximumInterpolationInterval; 0065 int m_maximumInterpolationDistance; 0066 0067 QImage m_timezoneMap; 0068 double m_timezoneMapWidth = 0.0; 0069 double m_timezoneMapHeight = 0.0; 0070 QJsonObject m_timezoneMapping; 0071 QByteArray m_lastDetectedTimeZoneId; 0072 0073 }; 0074 0075 #endif // GPXENGINE_H