diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-01 09:53:55 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-01 09:54:08 +0200 |
commit | 19642842cea91a4588828362eba023c5da5ab57b (patch) | |
tree | 10366b074ae32e280300eb5f6fbcd5111ad4c82b /src/plugins/geoservices | |
parent | 1a1d2e3fff5856dc9d1283b510a9f325c6fb8a93 (diff) | |
parent | e7099f14c8faea4fb7c89877973b7cec75044cb3 (diff) | |
download | qtlocation-19642842cea91a4588828362eba023c5da5ab57b.tar.gz |
Merge remote-tracking branch 'origin/5.6' into 5.7
Change-Id: I4f29307985225a723304783e00a6844a1b9ee825
Diffstat (limited to 'src/plugins/geoservices')
3 files changed, 48 insertions, 10 deletions
diff --git a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp index 920b0148..fba177f4 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"))) { @@ -220,4 +219,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 2ceebc74..247e4377 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. |