Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qgeotilefetcherosm.cpp
Go to the documentation of this file.
1// Copyright (C) 2016 Aaron McCarthy <mccarthy.aaron@gmail.com>
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5#include "qgeomapreplyosm.h"
6
7#include <QtNetwork/QNetworkAccessManager>
8#include <QtNetwork/QNetworkRequest>
9#include <QtLocation/private/qgeotilespec_p.h>
10#include <QtLocation/private/qgeotilefetcher_p_p.h>
11
12
14
15static bool providersResolved(const QList<QGeoTileProviderOsm *> &providers)
16{
17 for (const QGeoTileProviderOsm *provider : providers)
18 if (!provider->isResolved())
19 return false;
20 return true;
21}
22
24{
25 Q_DECLARE_PUBLIC(QGeoTileFetcherOsm)
26public:
29
30private:
31 Q_DISABLE_COPY(QGeoTileFetcherOsmPrivate)
32};
33
37
41
42QGeoTileFetcherOsm::QGeoTileFetcherOsm(const QList<QGeoTileProviderOsm *> &providers,
45 m_userAgent("Qt Location based application"),
46 m_providers(providers),
47 m_nm(nm),
48 m_ready(true)
49{
50 m_nm->setParent(this);
51 for (QGeoTileProviderOsm *provider : m_providers) {
52 if (!provider->isResolved()) {
53 m_ready = false;
60 provider->resolveProvider();
61 }
62 }
63 if (m_ready)
64 readyUpdated();
65}
66
68{
69 m_userAgent = userAgent;
70}
71
73{
74 if (!m_ready) {
75 for (QGeoTileProviderOsm *provider : m_providers)
76 if (!provider->isResolved())
77 provider->resolveProvider();
78 }
79 return m_ready;
80}
81
83{
84 if ((m_ready = providersResolved(m_providers))) {
85 qWarning("QGeoTileFetcherOsm: all providers resolved");
86 readyUpdated();
87 }
88 emit providerDataUpdated(provider);
89}
90
92{
93 if ((m_ready = providersResolved(m_providers))) {
94 qWarning("QGeoTileFetcherOsm: all providers resolved");
95 readyUpdated();
96 }
97 emit providerDataUpdated(provider);
98}
99
101{
103
104 if (!d->queue_.isEmpty())
105 d->timer_.start(0, this);
106}
107
109{
110 int id = spec.mapId();
111 if (id < 1 || id > m_providers.size()) {
112 qWarning("Unknown map id %d\n", spec.mapId());
113 if (m_providers.isEmpty())
114 return nullptr;
115 else
116 id = 1;
117 }
118 id -= 1; // TODO: make OSM map ids start from 0.
119
120 if (spec.zoom() > m_providers[id]->maximumZoomLevel() || spec.zoom() < m_providers[id]->minimumZoomLevel())
121 return nullptr;
122
123 const QUrl url = m_providers[id]->tileAddress(spec.x(), spec.y(), spec.zoom());
127 QNetworkReply *reply = m_nm->get(request);
128 return new QGeoMapReplyOsm(reply, spec, m_providers[id]->format());
129}
130
131void QGeoTileFetcherOsm::readyUpdated()
132{
133 updateTileRequests(QSet<QGeoTileSpec>(), QSet<QGeoTileSpec>());
134}
135
\inmodule QtCore
Definition qbytearray.h:57
bool initialized() const override
void providerDataUpdated(const QGeoTileProviderOsm *provider)
void onProviderResolutionError(const QGeoTileProviderOsm *provider)
friend class QGeoMapReplyOsm
QGeoTiledMapReply * getTileImage(const QGeoTileSpec &spec) override
void setUserAgent(const QByteArray &userAgent)
QGeoTileFetcherOsm(const QList< QGeoTileProviderOsm * > &providers, QNetworkAccessManager *nm, QGeoMappingManagerEngine *parent)
void onProviderResolutionFinished(const QGeoTileProviderOsm *provider)
void updateTileRequests(const QSet< QGeoTileSpec > &tilesAdded, const QSet< QGeoTileSpec > &tilesRemoved)
void resolutionFinished(const QGeoTileProviderOsm *provider)
void resolutionError(const QGeoTileProviderOsm *provider)
int x() const
int zoom() const
int mapId() const
int y() const
\inmodule QtLocation
qsizetype size() const noexcept
Definition qlist.h:397
bool isEmpty() const noexcept
Definition qlist.h:401
The QNetworkAccessManager class allows the application to send network requests and receive replies.
QNetworkReply * get(const QNetworkRequest &request)
Posts a request to obtain the contents of the target request and returns a new QNetworkReply object o...
The QNetworkReply class contains the data and headers for a request sent with QNetworkAccessManager.
The QNetworkRequest class holds a request to be sent with QNetworkAccessManager.
void setHeader(KnownHeaders header, const QVariant &value)
Sets the value of the known header header to be value, overriding any previously set headers.
void setUrl(const QUrl &url)
Sets the URL this network request is referring to be url.
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
void setParent(QObject *parent)
Makes the object a child of parent.
Definition qobject.cpp:2195
\inmodule QtCore
Definition qurl.h:94
Combined button and popup list for selecting options.
@ QueuedConnection
static QT_BEGIN_NAMESPACE bool providersResolved(const QList< QGeoTileProviderOsm * > &providers)
#define qWarning
Definition qlogging.h:166
GLenum GLuint id
[7]
GLint GLsizei GLsizei GLenum format
#define emit
QUrl url("example.com")
[constructor-url-reference]
QNetworkRequest request(url)
QNetworkReply * reply