diff options
author | Aaron McCarthy <mccarthy.aaron@gmail.com> | 2015-01-23 15:25:15 +1000 |
---|---|---|
committer | Alex Blasche <alexander.blasche@theqtcompany.com> | 2015-01-28 14:00:53 +0000 |
commit | baae1926455d9b69b1405cc1683d1be0f3565338 (patch) | |
tree | 16adae7e3a0bf6a57f2ee011df3233efaa03ca96 /src/plugins/geoservices | |
parent | 74573e89ad818145609ea1f56a1c2695a088746a (diff) | |
download | qtlocation-baae1926455d9b69b1405cc1683d1be0f3565338.tar.gz |
Add support for more tile types to OSM plugin.
In addition to the existing MapQuest tile set make the ThunderForest
tile set also available as additional supported map types.
This change adds the following map types to the OSM plugin:
StreetMap - from MapQuest
SatelliteMapDay - from MapQueset
CycleMap - from ThunderForest
TransitMap (day) - from ThunderForest
TransitMap (night) - from ThunderForest
TerrainMap - from ThunderForest
PedestrianMap - from ThunderForeset
Change-Id: I663b275689ee55929d0afa7da20ed3c57c78e037
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
Diffstat (limited to 'src/plugins/geoservices')
-rw-r--r-- | src/plugins/geoservices/osm/osm.pro | 2 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeomapreplyosm.cpp | 11 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeotiledmapdataosm.cpp | 84 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeotiledmapdataosm.h | 59 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp | 13 | ||||
-rw-r--r-- | src/plugins/geoservices/osm/qgeotilefetcherosm.cpp | 45 |
6 files changed, 185 insertions, 29 deletions
diff --git a/src/plugins/geoservices/osm/osm.pro b/src/plugins/geoservices/osm/osm.pro index f8744061..aa24fbc9 100644 --- a/src/plugins/geoservices/osm/osm.pro +++ b/src/plugins/geoservices/osm/osm.pro @@ -8,6 +8,7 @@ load(qt_plugin) HEADERS += \ qgeoserviceproviderpluginosm.h \ qgeotiledmappingmanagerengineosm.h \ + qgeotiledmapdataosm.h \ qgeotilefetcherosm.h \ qgeomapreplyosm.h \ qgeocodingmanagerengineosm.h \ @@ -19,6 +20,7 @@ HEADERS += \ SOURCES += \ qgeoserviceproviderpluginosm.cpp \ qgeotiledmappingmanagerengineosm.cpp \ + qgeotiledmapdataosm.cpp \ qgeotilefetcherosm.cpp \ qgeomapreplyosm.cpp \ qgeocodingmanagerengineosm.cpp \ diff --git a/src/plugins/geoservices/osm/qgeomapreplyosm.cpp b/src/plugins/geoservices/osm/qgeomapreplyosm.cpp index b0c06f22..0d061c0a 100644 --- a/src/plugins/geoservices/osm/qgeomapreplyosm.cpp +++ b/src/plugins/geoservices/osm/qgeomapreplyosm.cpp @@ -76,16 +76,7 @@ void QGeoMapReplyOsm::networkReplyFinished() QByteArray a = m_reply->readAll(); setMapImageData(a); - switch (tileSpec().mapId()) { - case 1: - setMapImageFormat("png"); - break; - case 2: - setMapImageFormat("png"); - break; - default: - qWarning("Unknown map id %d", tileSpec().mapId()); - } + setMapImageFormat("png"); setFinished(true); diff --git a/src/plugins/geoservices/osm/qgeotiledmapdataosm.cpp b/src/plugins/geoservices/osm/qgeotiledmapdataosm.cpp new file mode 100644 index 00000000..5b9173cb --- /dev/null +++ b/src/plugins/geoservices/osm/qgeotiledmapdataosm.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Aaron McCarthy <mccarthy.aaron@gmail.com> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtLocation module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgeotiledmapdataosm.h" +#include "qgeotiledmappingmanagerengineosm.h" + +#include <QtLocation/private/qgeotilespec_p.h> + +QT_BEGIN_NAMESPACE + +QGeoTiledMapDataOsm::QGeoTiledMapDataOsm(QGeoTiledMappingManagerEngineOsm *engine, QObject *parent) +: QGeoTiledMapData(engine, parent), m_mapId(-1) +{ +} + +QGeoTiledMapDataOsm::~QGeoTiledMapDataOsm() +{ +} + +void QGeoTiledMapDataOsm::evaluateCopyrights(const QSet<QGeoTileSpec> &visibleTiles) +{ + if (visibleTiles.isEmpty()) + return; + + QGeoTileSpec tile = *visibleTiles.constBegin(); + if (tile.mapId() == m_mapId) + return; + + m_mapId = tile.mapId(); + + QString copyrights; + switch (m_mapId) { + case 1: + case 2: + // set attribution to Map Quest + copyrights = tr("Tiles Courtesy of <a href='http://www.mapquest.com/'>MapQuest</a><br/>Data \u00a9 <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors"); + break; + case 3: + case 4: + case 5: + case 6: + case 7: + // set attribution to Thunder Forest + copyrights = tr("Maps \u00a9 <a href='http://www.thunderforest.com/'>Thunderforest</a><br/>Data \u00a9 <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors"); + break; + default: + // set attribution to OSM + copyrights = tr("\u00a9 <a href='http://www.openstreetmap.org/copyright'>OpenStreetMap</a> contributors"); + } + + emit copyrightsChanged(copyrights); +} + +QT_END_NAMESPACE diff --git a/src/plugins/geoservices/osm/qgeotiledmapdataosm.h b/src/plugins/geoservices/osm/qgeotiledmapdataosm.h new file mode 100644 index 00000000..ffd24dc2 --- /dev/null +++ b/src/plugins/geoservices/osm/qgeotiledmapdataosm.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Aaron McCarthy <mccarthy.aaron@gmail.com> +** Contact: http://www.qt-project.org/legal +** +** This file is part of the QtLocation module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGEOTILEDMAPDATAOSM_H +#define QGEOTILEDMAPDATAOSM_H + +#include <QtLocation/private/qgeotiledmapdata_p.h> + +QT_BEGIN_NAMESPACE + +class QGeoTiledMappingManagerEngineOsm; +class QGeoTiledMapDataOsm: public QGeoTiledMapData +{ + Q_OBJECT + +public: + QGeoTiledMapDataOsm(QGeoTiledMappingManagerEngineOsm *engine, QObject *parent = 0); + ~QGeoTiledMapDataOsm(); + +protected: + void evaluateCopyrights(const QSet<QGeoTileSpec> &visibleTiles) Q_DECL_OVERRIDE; + +private: + int m_mapId; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp index e549007f..4e018f51 100644 --- a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp +++ b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp @@ -33,6 +33,7 @@ #include "qgeotiledmappingmanagerengineosm.h" #include "qgeotilefetcherosm.h" +#include "qgeotiledmapdataosm.h" #include <QtLocation/private/qgeocameracapabilities_p.h> #include <QtLocation/private/qgeomaptype_p.h> @@ -51,8 +52,14 @@ QGeoTiledMappingManagerEngineOsm::QGeoTiledMappingManagerEngineOsm(const QVarian setTileSize(QSize(256, 256)); QList<QGeoMapType> mapTypes; - mapTypes << QGeoMapType(QGeoMapType::StreetMap, tr("Street Map"), tr("OpenStreetMap street map"), false, false, 1); - mapTypes << QGeoMapType(QGeoMapType::SatelliteMapDay, tr("Satellite Map"), tr("OpenStreetMap satellite map"), false, false, 2); + // See map type implementations in QGeoTiledMapDataOsm and QGeoTileFetcherOsm. + mapTypes << QGeoMapType(QGeoMapType::StreetMap, tr("Street Map"), tr("Street map view in daylight mode"), false, false, 1); + mapTypes << QGeoMapType(QGeoMapType::SatelliteMapDay, tr("Satellite Map"), tr("Satellite map view in daylight mode"), false, false, 2); + mapTypes << QGeoMapType(QGeoMapType::CycleMap, tr("Cycle Map"), tr("Cycle map view in daylight mode"), false, false, 3); + mapTypes << QGeoMapType(QGeoMapType::TransitMap, tr("Transit Map"), tr("Public transit map view in daylight mode"), false, false, 4); + mapTypes << QGeoMapType(QGeoMapType::TransitMap, tr("Night Transit Map"), tr("Public transit map view in night mode"), false, true, 5); + mapTypes << QGeoMapType(QGeoMapType::TerrainMap, tr("Terrain Map"), tr("Terrain map view"), false, false, 6); + mapTypes << QGeoMapType(QGeoMapType::PedestrianMap, tr("Hiking Map"), tr("Hiking map view"), false, false, 7); setSupportedMapTypes(mapTypes); QGeoTileFetcherOsm *tileFetcher = new QGeoTileFetcherOsm(this); @@ -73,7 +80,7 @@ QGeoTiledMappingManagerEngineOsm::~QGeoTiledMappingManagerEngineOsm() QGeoMapData *QGeoTiledMappingManagerEngineOsm::createMapData() { - return new QGeoTiledMapData(this, 0); + return new QGeoTiledMapDataOsm(this); } QT_END_NAMESPACE diff --git a/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp b/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp index 32f05030..10fd1709 100644 --- a/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp +++ b/src/plugins/geoservices/osm/qgeotilefetcherosm.cpp @@ -56,25 +56,38 @@ QGeoTiledMapReply *QGeoTileFetcherOsm::getTileImage(const QGeoTileSpec &spec) QNetworkRequest request; request.setRawHeader("User-Agent", m_userAgent); + QString urlPrefix; + switch (spec.mapId()) { - case 1: - // opensteetmap.org street map - request.setUrl(QUrl(QStringLiteral("http://otile1.mqcdn.com/tiles/1.0.0/map/") + - QString::number(spec.zoom()) + QLatin1Char('/') + - QString::number(spec.x()) + QLatin1Char('/') + - QString::number(spec.y()) + QStringLiteral(".png"))); - break; - case 2: - // opensteetmap.org satellite map - request.setUrl(QUrl(QStringLiteral("http://otile1.mqcdn.com/tiles/1.0.0/sat/") + - QString::number(spec.zoom()) + QLatin1Char('/') + - QString::number(spec.x()) + QLatin1Char('/') + - QString::number(spec.y()) + QStringLiteral(".png"))); - break; - default: - qWarning("Unknown map id %d\n", spec.mapId()); + case 1: + urlPrefix = QStringLiteral("http://otile1.mqcdn.com/tiles/1.0.0/map/"); + break; + case 2: + urlPrefix = QStringLiteral("http://otile1.mqcdn.com/tiles/1.0.0/sat/"); + break; + case 3: + urlPrefix = QStringLiteral("http://a.tile.thunderforest.com/cycle/"); + break; + case 4: + urlPrefix = QStringLiteral("http://a.tile.thunderforest.com/transport/"); + break; + case 5: + urlPrefix = QStringLiteral("http://a.tile.thunderforest.com/transport-dark/"); + break; + case 6: + urlPrefix = QStringLiteral("http://a.tile.thunderforest.com/landscape/"); + break; + case 7: + urlPrefix = QStringLiteral("http://a.tile.thunderforest.com/outdoors/"); + break; + default: + qWarning("Unknown map id %d\n", spec.mapId()); } + request.setUrl(QUrl(urlPrefix + QString::number(spec.zoom()) + QLatin1Char('/') + + QString::number(spec.x()) + QLatin1Char('/') + + QString::number(spec.y()) + QStringLiteral(".png"))); + QNetworkReply *reply = m_networkManager->get(request); return new QGeoMapReplyOsm(reply, spec); |