1/****************************************************************************
2**
3** Copyright (C) 2014 Canonical Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the QtLocation module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36
37#include "qgeotilefetchermapbox.h"
38#include "qgeomapreplymapbox.h"
39#include "qmapboxcommon.h"
40
41#include <QtNetwork/QNetworkAccessManager>
42#include <QtNetwork/QNetworkRequest>
43#include <QtLocation/private/qgeotilespec_p.h>
44#include <QDebug>
45
46QT_BEGIN_NAMESPACE
47
48QGeoTileFetcherMapbox::QGeoTileFetcherMapbox(int scaleFactor, QGeoTiledMappingManagerEngine *parent)
49: QGeoTileFetcher(parent), m_networkManager(new QNetworkAccessManager(this)),
50 m_userAgent(mapboxDefaultUserAgent),
51 m_format("png"),
52 m_replyFormat("png"),
53 m_accessToken("")
54{
55 m_scaleFactor = qBound(min: 1, val: scaleFactor, max: 2);
56}
57
58void QGeoTileFetcherMapbox::setUserAgent(const QByteArray &userAgent)
59{
60 m_userAgent = userAgent;
61}
62
63void QGeoTileFetcherMapbox::setMapIds(const QVector<QString> &mapIds)
64{
65 m_mapIds = mapIds;
66}
67
68void QGeoTileFetcherMapbox::setFormat(const QString &format)
69{
70 m_format = format;
71
72 if (m_format == "png" || m_format == "png32" || m_format == "png64" || m_format == "png128" || m_format == "png256")
73 m_replyFormat = "png";
74 else if (m_format == "jpg70" || m_format == "jpg80" || m_format == "jpg90")
75 m_replyFormat = "jpg";
76 else
77 qWarning() << "Unknown map format " << m_format;
78}
79
80void QGeoTileFetcherMapbox::setAccessToken(const QString &accessToken)
81{
82 m_accessToken = accessToken;
83}
84
85QGeoTiledMapReply *QGeoTileFetcherMapbox::getTileImage(const QGeoTileSpec &spec)
86{
87 QNetworkRequest request;
88 request.setRawHeader(headerName: "User-Agent", value: m_userAgent);
89
90 request.setUrl(QUrl(mapboxTilesApiPath +
91 ((spec.mapId() >= m_mapIds.size()) ? QStringLiteral("mapbox.streets") : m_mapIds[spec.mapId() - 1]) + QLatin1Char('/') +
92 QString::number(spec.zoom()) + QLatin1Char('/') +
93 QString::number(spec.x()) + QLatin1Char('/') +
94 QString::number(spec.y()) +
95 ((m_scaleFactor > 1) ? (QLatin1Char('@') + QString::number(m_scaleFactor) + QLatin1String("x.")) : QLatin1String(".")) +
96 m_format + QLatin1Char('?') +
97 QStringLiteral("access_token=") + m_accessToken));
98
99 QNetworkReply *reply = m_networkManager->get(request);
100
101 return new QGeoMapReplyMapbox(reply, spec, m_replyFormat);
102}
103
104QT_END_NAMESPACE
105

source code of qtlocation/src/plugins/geoservices/mapbox/qgeotilefetchermapbox.cpp