Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
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
// Qt-Security score:significant reason:default
4
5
#
include
"qgeotilefetcherosm.h"
6
#
include
"qgeomapreplyosm.h"
7
8
#
include
<
QtNetwork
/
QNetworkAccessManager
>
9
#
include
<
QtNetwork
/
QNetworkRequest
>
10
#
include
<
QtLocation
/
private
/
qgeotilespec_p
.
h
>
11
#
include
<
QtLocation
/
private
/
qgeotilefetcher_p_p
.
h
>
12
13
14
QT_BEGIN_NAMESPACE
15
16
static
bool
providersResolved
(
const
QList<QGeoTileProviderOsm *> &providers)
17
{
18
for
(
const
QGeoTileProviderOsm *provider : providers)
19
if
(!provider->isResolved())
20
return
false
;
21
return
true
;
22
}
23
24
class
QGeoTileFetcherOsmPrivate
:
public
QGeoTileFetcherPrivate
25
{
26
Q_DECLARE_PUBLIC(QGeoTileFetcherOsm)
27
public
:
28
QGeoTileFetcherOsmPrivate
();
29
virtual
~
QGeoTileFetcherOsmPrivate
();
30
31
private
:
32
Q_DISABLE_COPY
(
QGeoTileFetcherOsmPrivate
)
33
};
34
35
QGeoTileFetcherOsmPrivate
::QGeoTileFetcherOsmPrivate() : QGeoTileFetcherPrivate()
36
{
37
}
38
39
QGeoTileFetcherOsmPrivate
::~
QGeoTileFetcherOsmPrivate
()
40
{
41
}
42
43
QGeoTileFetcherOsm
::
QGeoTileFetcherOsm
(
const
QList<QGeoTileProviderOsm *> &providers,
44
QNetworkAccessManager *nm, QGeoMappingManagerEngine *parent)
45
:
QGeoTileFetcher
(*
new
QGeoTileFetcherOsmPrivate
(),
parent
),
46
m_userAgent
(
"Qt Location based application"
),
47
m_providers
(
providers
),
48
m_nm(nm),
49
m_ready(
true
)
50
{
51
m_nm->setParent(
this
);
52
for
(QGeoTileProviderOsm *provider : m_providers) {
53
if
(!provider->isResolved()) {
54
m_ready =
false
;
55
connect(provider, &QGeoTileProviderOsm::resolutionFinished,
56
this
, &QGeoTileFetcherOsm::onProviderResolutionFinished);
57
connect(provider, &QGeoTileProviderOsm::resolutionError,
58
this
, &QGeoTileFetcherOsm::onProviderResolutionError);
59
connect(provider, &QGeoTileProviderOsm::resolutionRequired,
60
this
, &QGeoTileFetcherOsm::restartTimer, Qt::QueuedConnection);
61
provider->resolveProvider();
62
}
63
}
64
if
(m_ready)
65
readyUpdated();
66
}
67
68
void
QGeoTileFetcherOsm
::
setUserAgent
(
const
QByteArray &userAgent)
69
{
70
m_userAgent = userAgent;
71
}
72
73
bool
QGeoTileFetcherOsm
::
initialized
()
const
74
{
75
if
(!m_ready) {
76
for
(QGeoTileProviderOsm *provider : m_providers)
77
if
(!provider->isResolved())
78
provider->resolveProvider();
79
}
80
return
m_ready;
81
}
82
83
void
QGeoTileFetcherOsm
::onProviderResolutionFinished(
const
QGeoTileProviderOsm
*provider)
84
{
85
if
((m_ready = providersResolved(m_providers))) {
86
qWarning(
"QGeoTileFetcherOsm: all providers resolved"
);
87
readyUpdated();
88
}
89
emit providerDataUpdated(provider);
90
}
91
92
void
QGeoTileFetcherOsm
::
onProviderResolutionError
(
const
QGeoTileProviderOsm
*provider)
93
{
94
if
((m_ready = providersResolved(m_providers))) {
95
qWarning(
"QGeoTileFetcherOsm: all providers resolved"
);
96
readyUpdated();
97
}
98
emit providerDataUpdated(provider);
99
}
100
101
void
QGeoTileFetcherOsm
::
restartTimer
()
102
{
103
Q_D(QGeoTileFetcherOsm);
104
105
if
(!d->queue_.isEmpty())
106
d->timer_.start(0,
this
);
107
}
108
109
QGeoTiledMapReply
*
QGeoTileFetcherOsm
::
getTileImage
(
const
QGeoTileSpec &spec)
110
{
111
int
id = spec.mapId();
112
if
(id < 1 || id > m_providers.size()) {
113
qWarning(
"Unknown map id %d\n"
, spec.mapId());
114
if
(m_providers.isEmpty())
115
return
nullptr
;
116
else
117
id = 1;
118
}
119
id -= 1;
// TODO: make OSM map ids start from 0.
120
121
if
(spec.zoom() > m_providers[id]->maximumZoomLevel() || spec.zoom() < m_providers[id]->minimumZoomLevel())
122
return
nullptr
;
123
124
const
QUrl url = m_providers[id]->tileAddress(spec.x(), spec.y(), spec.zoom());
125
QNetworkRequest request;
126
request.setHeader(QNetworkRequest::UserAgentHeader, m_userAgent);
127
request.setUrl(url);
128
QNetworkReply *reply = m_nm->get(request);
129
return
new
QGeoMapReplyOsm(reply, spec, m_providers[id]->format());
130
}
131
132
void
QGeoTileFetcherOsm
::readyUpdated()
133
{
134
updateTileRequests(QSet<QGeoTileSpec>(), QSet<QGeoTileSpec>());
135
}
136
137
QT_END_NAMESPACE
QGeoTileFetcherOsmPrivate
Definition
qgeotilefetcherosm.cpp:25
QGeoTileFetcherOsmPrivate::~QGeoTileFetcherOsmPrivate
virtual ~QGeoTileFetcherOsmPrivate()
Definition
qgeotilefetcherosm.cpp:39
QGeoTileFetcherOsm
Definition
qgeotilefetcherosm.h:19
QGeoTileFetcherOsm::initialized
bool initialized() const override
Definition
qgeotilefetcherosm.cpp:73
QGeoTileFetcherOsm::restartTimer
void restartTimer()
Definition
qgeotilefetcherosm.cpp:101
QGeoTileFetcherOsm::onProviderResolutionError
void onProviderResolutionError(const QGeoTileProviderOsm *provider)
Definition
qgeotilefetcherosm.cpp:92
QGeoTileFetcherOsm::getTileImage
QGeoTiledMapReply * getTileImage(const QGeoTileSpec &spec) override
Definition
qgeotilefetcherosm.cpp:109
QGeoTileFetcherOsm::setUserAgent
void setUserAgent(const QByteArray &userAgent)
Definition
qgeotilefetcherosm.cpp:68
QGeoTileFetcherOsm::QGeoTileFetcherOsm
QGeoTileFetcherOsm(const QList< QGeoTileProviderOsm * > &providers, QNetworkAccessManager *nm, QGeoMappingManagerEngine *parent)
Definition
qgeotilefetcherosm.cpp:43
QGeoTileProviderOsm
Definition
qgeotileproviderosm.h:101
QT_BEGIN_NAMESPACE
Combined button and popup list for selecting options.
Definition
qsequentialanimationgroup.cpp:47
providersResolved
static QT_BEGIN_NAMESPACE bool providersResolved(const QList< QGeoTileProviderOsm * > &providers)
Definition
qgeotilefetcherosm.cpp:16
qtlocation
src
plugins
geoservices
osm
qgeotilefetcherosm.cpp
Generated on
for Qt by
1.18.0