40 QGeoServiceProvider::Error *error,
41 QString *errorString) :
42 QGeoTiledMappingManagerEngine()
44 QGeoCameraCapabilities cameraCaps;
46 double minimumZoomLevel = 0;
47 double maximumZoomLevel = 19;
49 if (parameters.contains(kParamMinimumZoomLevel))
50 minimumZoomLevel = parameters[kParamMinimumZoomLevel].toDouble();
52 if (parameters.contains(kParamMaximumZoomLevel))
53 maximumZoomLevel = parameters[kParamMaximumZoomLevel].toDouble();
55 cameraCaps.setMinimumZoomLevel(minimumZoomLevel);
56 cameraCaps.setMaximumZoomLevel(maximumZoomLevel);
57 cameraCaps.setSupportsBearing(
true);
58 cameraCaps.setSupportsTilting(
true);
59 cameraCaps.setMinimumTilt(0);
60 cameraCaps.setMaximumTilt(80);
61 cameraCaps.setMinimumFieldOfView(20.0);
62 cameraCaps.setMaximumFieldOfView(120.0);
63 cameraCaps.setOverzoomEnabled(
true);
64 setCameraCapabilities(cameraCaps);
66 setTileSize(QSize(256, 256));
68 if (!initializeMapSources(error, errorString, cameraCaps))
71 QList<QGeoMapType> mapTypes;
73 for (GeoMapSource *mapSource : m_mapSources) {
74 mapTypes << QGeoMapType(
77 mapSource->description(),
85 setSupportedMapTypes(mapTypes);
89 if (parameters.contains(kParamUserAgent))
90 tileFetcher->setUserAgent(parameters.value(kParamUserAgent).toString().toLatin1());
92 if (parameters.contains(kParamToken))
93 tileFetcher->setToken(parameters.value(kParamToken).toString());
95 setTileFetcher(tileFetcher);
98 QString cacheDirectory;
99 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.directory"))) {
100 cacheDirectory = parameters.value(QStringLiteral(
"esri.mapping.cache.directory")).toString();
103 cacheDirectory = QAbstractGeoTileCache::baseLocationCacheDirectory() + QLatin1String(
"esri");
105 QGeoFileTileCache *tileCache =
new QGeoFileTileCache(cacheDirectory);
108
109
110 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.disk.cost_strategy"))) {
111 QString cacheStrategy = parameters.value(QStringLiteral(
"esri.mapping.cache.disk.cost_strategy")).toString().toLower();
112 if (cacheStrategy == QLatin1String(
"bytesize"))
113 tileCache->setCostStrategyDisk(QGeoFileTileCache::ByteSize);
115 tileCache->setCostStrategyDisk(QGeoFileTileCache::Unitary);
117 tileCache->setCostStrategyDisk(QGeoFileTileCache::ByteSize);
119 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.disk.size"))) {
121 int cacheSize = parameters.value(QStringLiteral(
"esri.mapping.cache.disk.size")).toString().toInt(&ok);
123 tileCache->setMaxDiskUsage(cacheSize);
127
128
129 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.memory.cost_strategy"))) {
130 QString cacheStrategy = parameters.value(QStringLiteral(
"esri.mapping.cache.memory.cost_strategy")).toString().toLower();
131 if (cacheStrategy == QLatin1String(
"bytesize"))
132 tileCache->setCostStrategyMemory(QGeoFileTileCache::ByteSize);
134 tileCache->setCostStrategyMemory(QGeoFileTileCache::Unitary);
136 tileCache->setCostStrategyMemory(QGeoFileTileCache::ByteSize);
138 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.memory.size"))) {
140 int cacheSize = parameters.value(QStringLiteral(
"esri.mapping.cache.memory.size")).toString().toInt(&ok);
142 tileCache->setMaxMemoryUsage(cacheSize);
146
147
148 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.texture.cost_strategy"))) {
149 QString cacheStrategy = parameters.value(QStringLiteral(
"esri.mapping.cache.texture.cost_strategy")).toString().toLower();
150 if (cacheStrategy == QLatin1String(
"bytesize"))
151 tileCache->setCostStrategyTexture(QGeoFileTileCache::ByteSize);
153 tileCache->setCostStrategyTexture(QGeoFileTileCache::Unitary);
155 tileCache->setCostStrategyTexture(QGeoFileTileCache::ByteSize);
157 if (parameters.contains(QStringLiteral(
"esri.mapping.cache.texture.size"))) {
159 int cacheSize = parameters.value(QStringLiteral(
"esri.mapping.cache.texture.size")).toString().toInt(&ok);
161 tileCache->setExtraTextureUsage(cacheSize);
165 if (parameters.contains(QStringLiteral(
"esri.mapping.prefetching_style"))) {
166 const QString prefetchingMode = parameters.value(QStringLiteral(
"esri.mapping.prefetching_style")).toString();
167 if (prefetchingMode == QStringLiteral(
"TwoNeighbourLayers"))
168 m_prefetchStyle = QGeoTiledMap::PrefetchTwoNeighbourLayers;
169 else if (prefetchingMode == QStringLiteral(
"OneNeighbourLayer"))
170 m_prefetchStyle = QGeoTiledMap::PrefetchNeighbourLayer;
171 else if (prefetchingMode == QStringLiteral(
"NoPrefetching"))
172 m_prefetchStyle = QGeoTiledMap::NoPrefetching;
175 setTileCache(tileCache);
176 *error = QGeoServiceProvider::NoError;
177 errorString->clear();