QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
QGeoTiledMappingManagerEngineQGC.cpp
Go to the documentation of this file.
2
3#include <mutex>
4
5#include <QtCore/QDir>
6#include <QtNetwork/QNetworkAccessManager>
7#include <QtNetwork/QNetworkDiskCache>
8#include <QtNetwork/QNetworkInformation>
9#include <QtNetwork/QNetworkProxy>
10#include <QtLocation/private/qgeocameracapabilities_p.h>
11#include <QtLocation/private/qgeomaptype_p.h>
12#include <QtLocation/private/qgeotiledmap_p.h>
13#include <QtLocation/private/qgeofiletilecache_p.h>
14
15#include "MapProvider.h"
16#include "QGCNetworkHelper.h"
17#include "QGCApplication.h"
18#include "QGCLoggingCategory.h"
19#include "QGCMapEngine.h"
20#include "QGCMapEngineManager.h"
21#include "QGCMapUrlEngine.h"
23#include "QGeoTiledMapQGC.h"
24#include "QGeoTileFetcherQGC.h"
25
26QGC_LOGGING_CATEGORY(QGeoTiledMappingManagerEngineQGCLog, "QtLocationPlugin.QGeoTiledMappingManagerEngineQGC")
27
28QGeoTiledMappingManagerEngineQGC::QGeoTiledMappingManagerEngineQGC(const QVariantMap &parameters, QGeoServiceProvider::Error *error, QString *errorString, QNetworkAccessManager *networkManager, QObject *parent)
29 : QGeoTiledMappingManagerEngine(parent)
30 , m_networkManager(networkManager)
31{
32 qCDebug(QGeoTiledMappingManagerEngineQGCLog) << this;
33
34 setLocale(qgcApp()->getCurrentLanguage());
35 (void) connect(qgcApp(), &QGCApplication::languageChanged, this, [this](const QLocale &locale) {
36 setLocale(locale);
37 });
38
39 QGeoCameraCapabilities cameraCaps{};
40 cameraCaps.setTileSize(256);
41 cameraCaps.setMinimumZoomLevel(2.0);
42 cameraCaps.setMaximumZoomLevel(QGC_MAX_MAP_ZOOM);
43 cameraCaps.setSupportsBearing(true);
44 cameraCaps.setSupportsRolling(false);
45 cameraCaps.setSupportsTilting(false);
46 cameraCaps.setMinimumTilt(0.0);
47 cameraCaps.setMaximumTilt(0.0);
48 cameraCaps.setMinimumFieldOfView(45.0);
49 cameraCaps.setMaximumFieldOfView(45.0);
50 cameraCaps.setOverzoomEnabled(true);
51 setCameraCapabilities(cameraCaps);
52
53 setTileVersion(kTileVersion);
54 setTileSize(QSize(256, 256));
55
56 QList<QGeoMapType> mapList;
57 const QList<SharedMapProvider> providers = UrlFactory::getProviders();
58 for (const SharedMapProvider &provider : providers) {
59 const QGeoMapType map = QGeoMapType(
60 provider->getMapStyle(),
61 provider->getMapName(),
62 provider->getMapName(),
63 false,
64 false,
65 provider->getMapId(),
66 QByteArrayLiteral("QGroundControl"),
67 cameraCapabilities()
68 );
69 mapList.append(map);
70 }
71 setSupportedMapTypes(mapList);
72
73 setCacheHint(QAbstractGeoTileCache::CacheArea::AllCaches);
74 QGeoFileTileCacheQGC *fileTileCache = new QGeoFileTileCacheQGC(parameters, this);
75 setTileCache(fileTileCache);
76
77 // MapEngine must be init after fileTileCache
78 static std::once_flag mapEngineInit;
79 std::call_once(mapEngineInit, [fileTileCache]() {
80 getQGCMapEngine()->init(fileTileCache->getDatabaseFilePath());
81 });
82
83 m_prefetchStyle = QGCNetworkHelper::isInternetAvailable() ? QGeoTiledMap::PrefetchTwoNeighbourLayers : QGeoTiledMap::NoPrefetching;
84 (void) connect(QNetworkInformation::instance(), &QNetworkInformation::reachabilityChanged, this, [this](QNetworkInformation::Reachability newReachability) {
85 if (newReachability == QNetworkInformation::Reachability::Online) {
86 m_prefetchStyle = QGeoTiledMap::PrefetchTwoNeighbourLayers;
87 } else {
88 m_prefetchStyle = QGeoTiledMap::NoPrefetching;
89 }
90 });
91
92 Q_ASSERT(m_networkManager);
93 QGeoTileFetcherQGC *tileFetcher = new QGeoTileFetcherQGC(m_networkManager, parameters, this);
94
95 *error = QGeoServiceProvider::NoError;
96 errorString->clear();
97 setTileFetcher(tileFetcher); // Calls engineInitialized()
98}
99
101{
102 qCDebug(QGeoTiledMappingManagerEngineQGCLog) << this;
103}
104
106{
107 QGeoTiledMapQGC *map = new QGeoTiledMapQGC(this, this);
108 map->setPrefetchStyle(m_prefetchStyle);
109 return map;
110}
#define QGC_MAX_MAP_ZOOM
Definition MapProvider.h:28
#define qgcApp()
QString errorString
Error error
#define QGC_LOGGING_CATEGORY(name, categoryStr)
QGCMapEngine * getQGCMapEngine()
std::shared_ptr< const MapProvider > SharedMapProvider
void languageChanged(const QLocale &locale)
void init(const QString &databasePath)
static QString getDatabaseFilePath()
static const QList< std::shared_ptr< const MapProvider > > & getProviders()
bool isInternetAvailable()
Check if internet is reachable (online state, stricter than isNetworkAvailable)