summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/osm
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-02 10:09:58 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-02 10:09:58 +0200
commitd031c0f7b13bb07227210632f66adceef71dc5bb (patch)
tree1a26163a1929c467c2de002a009364434c918dff /src/plugins/geoservices/osm
parent76e3fea9e77713860211c599b2a0aff3a72902c6 (diff)
parent19642842cea91a4588828362eba023c5da5ab57b (diff)
downloadqtlocation-d031c0f7b13bb07227210632f66adceef71dc5bb.tar.gz
Merge remote-tracking branch 'origin/5.7' into dev
Change-Id: I9bfe99e7e619cbf03cda73c3df4f2f51851474ae
Diffstat (limited to 'src/plugins/geoservices/osm')
-rw-r--r--src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp46
-rw-r--r--src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h7
-rw-r--r--src/plugins/geoservices/osm/qgeotilefetcherosm.cpp5
3 files changed, 48 insertions, 10 deletions
diff --git a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp
index dbc174d3..2b562e62 100644
--- a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp
+++ b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp
@@ -86,11 +86,8 @@ QGeoTiledMappingManagerEngineOsm::QGeoTiledMappingManagerEngineOsm(const QVarian
new QGeoTileProviderOsm(domain + "satellite",
nm,
QGeoMapType(QGeoMapType::SatelliteMapDay, tr("Satellite Map"), tr("Satellite map view in daylight mode"), false, false, 2),
- QGeoTileProviderOsm::TileProvider(QStringLiteral("http://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer/tile/%z/%y/%x"),
- QStringLiteral("jpg"),
- QStringLiteral("<a href='http://basemap.nationalmap.gov/arcgis/rest/services/USGSImageryOnly/MapServer'>USGS The National Map: Orthoimagery</a>"),
- QStringLiteral("<a href='http://landsat.gsfc.nasa.gov/?page_id=2339'>USGS/NASA Landsat</a>")
- )));
+ QGeoTileProviderOsm::TileProvider()
+ ));
m_providers.push_back(
new QGeoTileProviderOsm(domain + "cycle",
nm,
@@ -173,15 +170,17 @@ QGeoTiledMappingManagerEngineOsm::QGeoTiledMappingManagerEngineOsm(const QVarian
if (parameters.contains(QStringLiteral("osm.mapping.providersrepository.disabled")))
disableRedirection = parameters.value(QStringLiteral("osm.mapping.providersrepository.disabled")).toBool();
- QList<QGeoMapType> mapTypes;
foreach (QGeoTileProviderOsm * provider, m_providers) {
provider->setParent(this);
if (disableRedirection)
provider->disableRedirection();
- mapTypes << provider->mapType();
+
+ connect(provider, &QGeoTileProviderOsm::resolutionFinished,
+ this, &QGeoTiledMappingManagerEngineOsm::onProviderResolutionFinished);
+ connect(provider, &QGeoTileProviderOsm::resolutionError,
+ this, &QGeoTiledMappingManagerEngineOsm::onProviderResolutionError);
}
- // See map type implementations in QGeoTiledMapOsm and QGeoTileFetcherOsm.
- setSupportedMapTypes(mapTypes);
+ updateMapTypes();
QGeoTileFetcherOsm *tileFetcher = new QGeoTileFetcherOsm(m_providers, nm, this);
if (parameters.contains(QStringLiteral("osm.useragent"))) {
@@ -251,4 +250,33 @@ QString QGeoTiledMappingManagerEngineOsm::customCopyright() const
return m_customCopyright;
}
+void QGeoTiledMappingManagerEngineOsm::onProviderResolutionFinished(const QGeoTileProviderOsm *provider)
+{
+ if (!provider->isResolved())
+ return;
+ updateMapTypes();
+}
+
+void QGeoTiledMappingManagerEngineOsm::onProviderResolutionError(const QGeoTileProviderOsm *provider, QNetworkReply::NetworkError error)
+{
+ Q_UNUSED(error)
+ if (!provider->isResolved())
+ return;
+ updateMapTypes();
+}
+
+void QGeoTiledMappingManagerEngineOsm::updateMapTypes()
+{
+ QList<QGeoMapType> mapTypes;
+ foreach (QGeoTileProviderOsm * provider, m_providers) {
+ // assume provider are ok until they have been resolved invalid
+ if (!provider->isResolved() || provider->isValid())
+ mapTypes << provider->mapType();
+ }
+ const QList<QGeoMapType> currentlySupportedMapTypes = supportedMapTypes();
+ if (currentlySupportedMapTypes != mapTypes)
+ // See map type implementations in QGeoTiledMapOsm and QGeoTileFetcherOsm.
+ setSupportedMapTypes(mapTypes);
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h
index bd79fc58..7536e655 100644
--- a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h
+++ b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h
@@ -63,6 +63,13 @@ public:
const QVector<QGeoTileProviderOsm *> &providers();
QString customCopyright() const;
+protected Q_SLOTS:
+ void onProviderResolutionFinished(const QGeoTileProviderOsm *provider);
+ void onProviderResolutionError(const QGeoTileProviderOsm *provider, QNetworkReply::NetworkError error);
+
+protected:
+ void updateMapTypes();
+
private:
QVector<QGeoTileProviderOsm *> m_providers;
QString m_customCopyright;
diff --git a/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp b/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp
index 730b5379..98621411 100644
--- a/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp
+++ b/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp
@@ -115,7 +115,10 @@ QGeoTiledMapReply *QGeoTileFetcherOsm::getTileImage(const QGeoTileSpec &spec)
int id = spec.mapId();
if (id < 1 || id > m_providers.size()) {
qWarning("Unknown map id %d\n", spec.mapId());
- id = 0;
+ if (m_providers.isEmpty())
+ return Q_NULLPTR;
+ else
+ id = 1;
}
id -= 1; // TODO: make OSM map ids start from 0.