summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@theqtcompany.com>2016-09-15 23:12:42 +0200
committerPaolo Angelelli <paolo.angelelli@qt.io>2016-10-05 11:30:12 +0000
commit218e208bbf1c3112d2ea5781debc605fc76db80a (patch)
tree34812fb7c66e401bc288d4916ec6fed58d443022 /src/plugins/geoservices/osm/qgeotileproviderosm.cpp
parenta65d9b7acf62fdafd670b40c01425cedff61106c (diff)
downloadqtlocation-218e208bbf1c3112d2ea5781debc605fc76db80a.tar.gz
Fix cache mixing with high-dpi and low-dpi osm providers
This cache fixes the cache mixing problem that has been introduced with the osm high dpi tiles support. high dpi providers fall back to low dpi ones and ultimately to hardcoded providers (also low dpi), and can also be enabled/disabled via plugin parameter, thus leaving the cache for a given map id dirty for the next run. With this patch high dpi tiles are named differently from low dpi ones. If high-dpi providers are selected, but become not available, the cache can also change the tileset to load at runtime Change-Id: I229692da07c1fc61c58fb0b6fae6ec5af16e43a7 Reviewed-by: Paolo Angelelli <paolo.angelelli@qt.io>
Diffstat (limited to 'src/plugins/geoservices/osm/qgeotileproviderosm.cpp')
-rw-r--r--src/plugins/geoservices/osm/qgeotileproviderosm.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/plugins/geoservices/osm/qgeotileproviderosm.cpp b/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
index d0819bd6..0d99c828 100644
--- a/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
+++ b/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
@@ -113,6 +113,13 @@ int QGeoTileProviderOsm::maximumZoomLevel() const
return m_provider->maximumZoomLevel();
}
+bool QGeoTileProviderOsm::isHighDpi() const
+{
+ if (!m_provider)
+ return false;
+ return m_provider->isHighDpi();
+}
+
const QGeoMapType &QGeoTileProviderOsm::mapType() const
{
return m_mapType;
@@ -183,8 +190,9 @@ void QGeoTileProviderOsm::onResolutionError(TileProvider *provider)
m_provider = p;
if (!p->isValid()) {
m_status = Idle;
- //m_status = Resolving;
- //p->resolveProvider();
+// m_status = Resolving;
+// p->resolveProvider();
+ emit resolutionRequired();
}
break;
}
@@ -230,12 +238,13 @@ static void sort2(int &a, int &b)
}
}
-TileProvider::TileProvider() : m_status(Invalid), m_nm(nullptr)
+TileProvider::TileProvider() : m_status(Invalid), m_nm(nullptr), m_highDpi(false)
{
}
-TileProvider::TileProvider(const QUrl &urlRedirector) : m_status(Idle), m_urlRedirector(urlRedirector), m_nm(nullptr)
+TileProvider::TileProvider(const QUrl &urlRedirector, bool highDpi)
+: m_status(Idle), m_urlRedirector(urlRedirector), m_nm(nullptr), m_highDpi(highDpi)
{
if (!m_urlRedirector.isValid())
m_status = Invalid;
@@ -245,11 +254,12 @@ TileProvider::TileProvider(const QString &urlTemplate,
const QString &format,
const QString &copyRightMap,
const QString &copyRightData,
+ bool highDpi,
int minimumZoomLevel,
int maximumZoomLevel)
: m_status(Invalid), m_nm(nullptr), m_urlTemplate(urlTemplate),
m_format(format), m_copyRightMap(copyRightMap), m_copyRightData(copyRightData),
- m_minimumZoomLevel(minimumZoomLevel), m_maximumZoomLevel(maximumZoomLevel)
+ m_minimumZoomLevel(minimumZoomLevel), m_maximumZoomLevel(maximumZoomLevel), m_highDpi(highDpi)
{
setupProvider();
}
@@ -299,7 +309,7 @@ void TileProvider::handleError(QNetworkReply::NetworkError error)
// prevent accessing the redirection info but not the actual providers.
m_status = Invalid;
default:
- qWarning() << "QGeoTileProviderOsm network error:" << error;
+ //qWarning() << "QGeoTileProviderOsm network error:" << error;
break;
}
}
@@ -543,6 +553,11 @@ int TileProvider::maximumZoomLevel() const
return m_maximumZoomLevel;
}
+bool TileProvider::isHighDpi() const
+{
+ return m_highDpi;
+}
+
void TileProvider::setStyleCopyRight(const QString &copyright)
{
m_copyRightStyle = copyright;