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