12#include <QtLocation/private/qgeotilespec_p.h>
29 return QStringLiteral(
"512");
31 return QStringLiteral(
"256");
33 return QStringLiteral(
"128");
38 return mapScheme.startsWith(
"satellite") || mapScheme.startsWith(
"hybrid") || mapScheme.startsWith(
"terrain");
44 const QSize &tileSize,
46: QGeoTileFetcher(engine), m_engineNokia(engine), m_networkManager(networkManager), m_ppi(ppi), m_copyrightsReply(
nullptr),
47 m_baseUriProvider(
new QGeoUriProvider(
this, parameters, QStringLiteral(
"here.mapping.host"), MAP_TILES_HOST)),
48 m_aerialUriProvider(
new QGeoUriProvider(
this, parameters, QStringLiteral(
"here.mapping.host.aerial"), MAP_TILES_HOST_AERIAL))
50 Q_ASSERT(networkManager);
51 m_tileSize = qMax(tileSize.width(), tileSize.height());
52 m_networkManager->setParent(
this);
54 m_apiKey = parameters.value(QStringLiteral(
"here.apiKey")).toString();
65 if ((spec.mapId() == 2) || (spec.mapId() == 12) || (spec.mapId() == 21)) {
67 }
else if ((spec.mapId() >= 7 && spec.mapId() <= 11)
68 || (spec.mapId() == 14)
69 || (spec.mapId() == 16)
70 || (spec.mapId() == 18)
71 || (spec.mapId() == 20)) {
75 QString rawRequest = getRequestString(spec, ppi);
76 if (rawRequest.isEmpty()) {
77 return new QGeoTiledMapReply(QGeoTiledMapReply::UnknownError,
78 tr(
"Mapping manager no longer exists"),
this);
81 QNetworkRequest netRequest((QUrl(rawRequest)));
82 netRequest.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute,
true);
84 QNetworkReply *netReply = m_networkManager->get(netRequest);
86 QGeoTiledMapReply *mapReply =
new QGeoMapReplyNokia(netReply, spec);
96 static const QString http(
"https://");
97 static const QString path(
"/maptile/2.1/maptile/newest/");
98 static const QChar slash(
'/');
100 QString requestString = http;
102 const QString mapScheme = m_engineNokia->getScheme(spec.mapId());
103 if (isAerialType(mapScheme))
104 requestString += m_aerialUriProvider->getCurrentHost();
106 requestString += m_baseUriProvider->getCurrentHost();
108 requestString += path;
109 requestString += mapScheme;
110 requestString += slash;
111 requestString += QString::number(spec.zoom());
112 requestString += slash;
113 requestString += QString::number(spec.x());
114 requestString += slash;
115 requestString += QString::number(spec.y());
116 requestString += slash;
117 requestString += ((ppi > 72)) ? sizeToStr(m_tileSize * 2) : sizeToStr(m_tileSize);
118 static const QString slashpng(
"/png8");
119 requestString += slashpng;
121 if (!m_apiKey.isEmpty()) {
122 requestString +=
"?apiKey=";
123 requestString += m_apiKey;
126 requestString +=
"&ppi=" + QString::number(ppi);
128 requestString +=
"&lg=";
129 requestString += getLanguageString();
130 return requestString;
136 return QStringLiteral(
"ENG");
138 QLocale locale = m_engineNokia.data()->locale();
146 switch (locale.language()) {
147 case QLocale::Arabic:
148 return QStringLiteral(
"ARA");
149 case QLocale::Chinese:
150 if (locale.script() == QLocale::TraditionalChineseScript)
151 return QStringLiteral(
"CHI");
153 return QStringLiteral(
"CHT");
155 return QStringLiteral(
"DUT");
156 case QLocale::French:
157 return QStringLiteral(
"FRE");
158 case QLocale::German:
159 return QStringLiteral(
"GER");
160 case QLocale::Gaelic:
161 return QStringLiteral(
"GLE");
163 return QStringLiteral(
"GRE");
164 case QLocale::Hebrew:
165 return QStringLiteral(
"HEB");
167 return QStringLiteral(
"HIN");
168 case QLocale::Indonesian:
169 return QStringLiteral(
"IND");
170 case QLocale::Italian:
171 return QStringLiteral(
"ITA");
172 case QLocale::Persian:
173 return QStringLiteral(
"PER");
174 case QLocale::Polish:
175 return QStringLiteral(
"POL");
176 case QLocale::Portuguese:
177 return QStringLiteral(
"POR");
178 case QLocale::Russian:
179 return QStringLiteral(
"RUS");
180 case QLocale::Sinhala:
181 return QStringLiteral(
"SIN");
182 case QLocale::Spanish:
183 return QStringLiteral(
"SPA");
185 return QStringLiteral(
"THA");
186 case QLocale::Turkish:
187 return QStringLiteral(
"TUR");
188 case QLocale::Ukrainian:
189 return QStringLiteral(
"UKR");
191 return QStringLiteral(
"URD");
192 case QLocale::Vietnamese:
193 return QStringLiteral(
"VIE");
196 return QStringLiteral(
"ENG");
208 if (m_engineNokia && m_copyrightsReply->error() == QNetworkReply::NoError) {
209 QMetaObject::invokeMethod(m_engineNokia.data(),
210 "loadCopyrightsDescriptorsFromJson",
211 Qt::QueuedConnection,
212 Q_ARG(QByteArray, m_copyrightsReply->readAll()));
215 m_copyrightsReply->deleteLater();
220 if (m_engineNokia && m_versionReply->error() == QNetworkReply::NoError) {
221 QMetaObject::invokeMethod(m_engineNokia.data(),
222 "parseNewVersionInfo",
223 Qt::QueuedConnection,
224 Q_ARG(QByteArray, m_versionReply->readAll()));
227 m_versionReply->deleteLater();
232 QString copyrightUrl = QStringLiteral(
"https://");
234 copyrightUrl += m_baseUriProvider->getCurrentHost();
235 copyrightUrl += QStringLiteral(
"/maptile/2.1/copyright/newest?output=json");
237 if (!apiKey().isEmpty()) {
238 copyrightUrl += QStringLiteral(
"&apiKey=");
239 copyrightUrl += apiKey();
242 QNetworkRequest netRequest((QUrl(copyrightUrl)));
243 m_copyrightsReply = m_networkManager->get(netRequest);
244 if (m_copyrightsReply->error() != QNetworkReply::NoError) {
245 qWarning() <<
__FUNCTION__ << m_copyrightsReply->errorString();
246 m_copyrightsReply->deleteLater();
250 if (m_copyrightsReply->isFinished()) {
253 connect(m_copyrightsReply, &QNetworkReply::finished,
254 this, &QGeoTileFetcherNokia::copyrightsFetched);
260 QString versionUrl = QStringLiteral(
"https://");
262 versionUrl += m_baseUriProvider->getCurrentHost();
263 versionUrl += QStringLiteral(
"/maptile/2.1/version");
265 if (!apiKey().isEmpty()) {
266 versionUrl += QStringLiteral(
"?apiKey=");
267 versionUrl += apiKey();
270 QNetworkRequest netRequest((QUrl(versionUrl)));
271 m_versionReply = m_networkManager->get(netRequest);
273 if (m_versionReply->error() != QNetworkReply::NoError) {
274 qWarning() <<
__FUNCTION__ << m_versionReply->errorString();
275 m_versionReply->deleteLater();
279 if (m_versionReply->isFinished())
282 connect(m_versionReply, &QNetworkReply::finished,
283 this, &QGeoTileFetcherNokia::versionFetched);
QGeoTiledMapReply * getTileImage(const QGeoTileSpec &spec) override
void fetchCopyrightsData()
bool isAerialType(const QString mapScheme)
QString sizeToStr(int size)