QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
OsmParserThread.h
Go to the documentation of this file.
1#pragma once
2
3#include <QtCore/QLoggingCategory>
4#include <QtCore/QMap>
5#include <QtCore/QObject>
6#include <QtCore/QStringList>
7#include <QtCore/QThread>
8#include <QtGui/QVector2D>
9#include <QtGui/QVector3D>
10#include <QtPositioning/QGeoCoordinate>
11
12#include <vector>
13
14Q_DECLARE_LOGGING_CATEGORY(OsmParserThreadLog)
15
16class OsmParserThread : public QObject
17{
18 Q_OBJECT
19
20 friend class OsmParserThreadTest;
21
22public:
24 {
25 std::vector<QGeoCoordinate> points_gps;
26 std::vector<QGeoCoordinate> points_gps_inner;
27 std::vector<QVector2D> points_local;
28 std::vector<QVector2D> points_local_inner;
29 QVector2D bb_max = QVector2D(-1e6, -1e6);
30 QVector2D bb_min = QVector2D(1e6, 1e6);
31 float height = 0;
32 float levels = 0;
33
34 void append(const std::vector<QGeoCoordinate> &newPoints, bool isInner);
35 void append(const std::vector<QVector2D> &newPoints, bool isInner);
36 };
37
38 explicit OsmParserThread(QObject *parent = nullptr);
40
41 void start(const QString &filePath);
42
43 const QGeoCoordinate& gpsRefPoint() const { return _gpsRefPoint; }
44 const QMap<uint64_t, QGeoCoordinate>& mapNodes() const { return _mapNodes; }
45 const QMap<uint64_t, BuildingType_t>& mapBuildings() const { return _mapBuildings; }
46 const QGeoCoordinate& coordinateMin() const { return _coordinateMin; }
47 const QGeoCoordinate& coordinateMax() const { return _coordinateMax; }
48
49signals:
50 void fileParsed(bool isValid);
51 void startThread(const QString &filePath);
52
53private:
54 void _parseOsmFile(const QString &filePath);
55
56 QGeoCoordinate _gpsRefPoint;
57 QMap<uint64_t, QGeoCoordinate> _mapNodes;
58 QMap<uint64_t, BuildingType_t> _mapBuildings;
59 QGeoCoordinate _coordinateMin;
60 QGeoCoordinate _coordinateMax;
61
62 QThread *_workerThread = nullptr;
63
64 const QStringList _singleStoreyBuildings = {
65 QStringLiteral("bungalow"),
66 QStringLiteral("shed"),
67 QStringLiteral("kiosk"),
68 QStringLiteral("cabin")
69 };
70 const QStringList _doubleStoreyLeisure = {
71 QStringLiteral("stadium"),
72 QStringLiteral("sports_hall"),
73 QStringLiteral("sauna")
74 };
75
76 bool _mapLoadedFlag = false;
77};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
const QMap< uint64_t, QGeoCoordinate > & mapNodes() const
const QGeoCoordinate & coordinateMin() const
void fileParsed(bool isValid)
const QGeoCoordinate & coordinateMax() const
void startThread(const QString &filePath)
const QMap< uint64_t, BuildingType_t > & mapBuildings() const
const QGeoCoordinate & gpsRefPoint() const
std::vector< QVector2D > points_local_inner
std::vector< QGeoCoordinate > points_gps
std::vector< QVector2D > points_local
std::vector< QGeoCoordinate > points_gps_inner