QGIS API Documentation 3.28.0-Firenze (ed3ad0430f)
qgsvectortileconnection.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectortileconnection.cpp
3 ---------------------
4 begin : March 2020
5 copyright : (C) 2020 by Martin Dobias
6 email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgslogger.h"
19#include "qgsdatasourceuri.h"
20#include "qgssettings.h"
21#include "qgshttpheaders.h"
22
23#include <QFileInfo>
24
26
27QString QgsVectorTileProviderConnection::encodedUri( const QgsVectorTileProviderConnection::Data &conn )
28{
30
31 const QFileInfo info( conn.url );
32 QString suffix = info.suffix().toLower();
33 if ( suffix.startsWith( QLatin1String( "mbtiles" ) ) )
34 {
35 uri.setParam( QStringLiteral( "type" ), QStringLiteral( "mbtiles" ) );
36 }
37 else
38 {
39 uri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) );
40 }
41
42 uri.setParam( QStringLiteral( "url" ), conn.url );
43 if ( conn.zMin != -1 )
44 uri.setParam( QStringLiteral( "zmin" ), QString::number( conn.zMin ) );
45 if ( conn.zMax != -1 )
46 uri.setParam( QStringLiteral( "zmax" ), QString::number( conn.zMax ) );
47 if ( !conn.authCfg.isEmpty() )
48 uri.setAuthConfigId( conn.authCfg );
49 if ( !conn.username.isEmpty() )
50 uri.setUsername( conn.username );
51 if ( !conn.password.isEmpty() )
52 uri.setPassword( conn.password );
53 if ( !conn.styleUrl.isEmpty() )
54 uri.setParam( QStringLiteral( "styleUrl" ), conn.styleUrl );
55
56 uri.setHttpHeaders( conn.httpHeaders );
57
58 switch ( conn.serviceType )
59 {
60 case Generic:
61 break;
62
63 case ArcgisVectorTileService:
64 uri.setParam( QStringLiteral( "serviceType" ), QStringLiteral( "arcgis" ) );
65 break;
66 }
67
68 return uri.encodedUri();
69}
70
71QgsVectorTileProviderConnection::Data QgsVectorTileProviderConnection::decodedUri( const QString &uri )
72{
73 QgsDataSourceUri dsUri;
74 dsUri.setEncodedUri( uri );
75
76 QgsVectorTileProviderConnection::Data conn;
77 conn.url = dsUri.param( QStringLiteral( "url" ) );
78 conn.zMin = dsUri.hasParam( QStringLiteral( "zmin" ) ) ? dsUri.param( QStringLiteral( "zmin" ) ).toInt() : -1;
79 conn.zMax = dsUri.hasParam( QStringLiteral( "zmax" ) ) ? dsUri.param( QStringLiteral( "zmax" ) ).toInt() : -1;
80 conn.authCfg = dsUri.authConfigId();
81 conn.username = dsUri.username();
82 conn.password = dsUri.password();
83 conn.styleUrl = dsUri.param( QStringLiteral( "styleUrl" ) );
84
85 conn.httpHeaders = dsUri.httpHeaders();
86
87 if ( dsUri.hasParam( QStringLiteral( "serviceType" ) ) )
88 {
89 if ( dsUri.param( QStringLiteral( "serviceType" ) ) == QLatin1String( "arcgis" ) )
90 conn.serviceType = ArcgisVectorTileService;
91 }
92 return conn;
93}
94
95QString QgsVectorTileProviderConnection::encodedLayerUri( const QgsVectorTileProviderConnection::Data &conn )
96{
97 // compared to encodedUri() this one also adds type=xyz to the URI
99
100 const QFileInfo info( conn.url );
101 QString suffix = info.suffix().toLower();
102 if ( suffix.startsWith( QLatin1String( "mbtiles" ) ) )
103 {
104 uri.setParam( QStringLiteral( "type" ), QStringLiteral( "mbtiles" ) );
105 }
106 else
107 {
108 uri.setParam( QStringLiteral( "type" ), QStringLiteral( "xyz" ) );
109 }
110
111 uri.setParam( QStringLiteral( "url" ), conn.url );
112 if ( conn.zMin != -1 )
113 uri.setParam( QStringLiteral( "zmin" ), QString::number( conn.zMin ) );
114 if ( conn.zMax != -1 )
115 uri.setParam( QStringLiteral( "zmax" ), QString::number( conn.zMax ) );
116 if ( !conn.authCfg.isEmpty() )
117 uri.setAuthConfigId( conn.authCfg );
118 if ( !conn.username.isEmpty() )
119 uri.setUsername( conn.username );
120 if ( !conn.password.isEmpty() )
121 uri.setPassword( conn.password );
122 if ( !conn.styleUrl.isEmpty() )
123 uri.setParam( QStringLiteral( "styleUrl" ), conn.styleUrl );
124
125 uri.setHttpHeaders( conn.httpHeaders );
126
127 switch ( conn.serviceType )
128 {
129 case Generic:
130 break;
131
132 case ArcgisVectorTileService:
133 uri.setParam( QStringLiteral( "serviceType" ), QStringLiteral( "arcgis" ) );
134 break;
135 }
136
137 return uri.encodedUri();
138}
139
140QStringList QgsVectorTileProviderConnection::connectionList()
141{
142 QgsSettings settings;
143 settings.beginGroup( QStringLiteral( "qgis/connections-vector-tile" ) );
144 QStringList connList = settings.childGroups();
145
146 return connList;
147}
148
149QgsVectorTileProviderConnection::Data QgsVectorTileProviderConnection::connection( const QString &name )
150{
151 QgsSettings settings;
152 settings.beginGroup( "qgis/connections-vector-tile/" + name );
153
154 if ( settings.value( "url" ).toString().isEmpty() )
155 return QgsVectorTileProviderConnection::Data();
156
157 QgsVectorTileProviderConnection::Data conn;
158 conn.url = settings.value( QStringLiteral( "url" ) ).toString();
159 conn.zMin = settings.value( QStringLiteral( "zmin" ), -1 ).toInt();
160 conn.zMax = settings.value( QStringLiteral( "zmax" ), -1 ).toInt();
161 conn.authCfg = settings.value( QStringLiteral( "authcfg" ) ).toString();
162 conn.username = settings.value( QStringLiteral( "username" ) ).toString();
163 conn.password = settings.value( QStringLiteral( "password" ) ).toString();
164 conn.styleUrl = settings.value( QStringLiteral( "styleUrl" ) ).toString();
165
166 conn.httpHeaders = QgsHttpHeaders( settings );
167
168 if ( settings.contains( QStringLiteral( "serviceType" ) ) )
169 {
170 if ( settings.value( QStringLiteral( "serviceType" ) ) == QLatin1String( "arcgis" ) )
171 conn.serviceType = ArcgisVectorTileService;
172 }
173
174 return conn;
175}
176
177void QgsVectorTileProviderConnection::deleteConnection( const QString &name )
178{
179 QgsSettings settings;
180 settings.remove( "qgis/connections-vector-tile/" + name );
181}
182
183void QgsVectorTileProviderConnection::addConnection( const QString &name, QgsVectorTileProviderConnection::Data conn )
184{
185 QgsSettings settings;
186
187 settings.beginGroup( "qgis/connections-vector-tile/" + name );
188 settings.setValue( QStringLiteral( "url" ), conn.url );
189 settings.setValue( QStringLiteral( "zmin" ), conn.zMin );
190 settings.setValue( QStringLiteral( "zmax" ), conn.zMax );
191 settings.setValue( QStringLiteral( "authcfg" ), conn.authCfg );
192 settings.setValue( QStringLiteral( "username" ), conn.username );
193 settings.setValue( QStringLiteral( "password" ), conn.password );
194 settings.setValue( QStringLiteral( "styleUrl" ), conn.styleUrl );
195
196 conn.httpHeaders.updateSettings( settings );
197
198 switch ( conn.serviceType )
199 {
200 case Generic:
201 break;
202
203 case ArcgisVectorTileService:
204 settings.setValue( QStringLiteral( "serviceType" ), QStringLiteral( "arcgis" ) );
205 break;
206 }
207}
208
209QString QgsVectorTileProviderConnection::selectedConnection()
210{
211 const QgsSettings settings;
212 return settings.value( QStringLiteral( "qgis/connections-vector-tile/selected" ) ).toString();
213}
214
215void QgsVectorTileProviderConnection::setSelectedConnection( const QString &name )
216{
217 QgsSettings settings;
218 return settings.setValue( QStringLiteral( "qgis/connections-vector-tile/selected" ), name );
219}
220
221//
222
223QgsVectorTileProviderConnection::QgsVectorTileProviderConnection( const QString &name )
225{
226 setUri( encodedUri( connection( name ) ) );
227}
228
229QgsVectorTileProviderConnection::QgsVectorTileProviderConnection( const QString &uri, const QVariantMap &configuration )
230 : QgsAbstractProviderConnection( uri, configuration )
231{
232}
233
234void QgsVectorTileProviderConnection::store( const QString &name ) const
235{
236 addConnection( name, decodedUri( uri() ) );
237}
238
239void QgsVectorTileProviderConnection::remove( const QString &name ) const
240{
241 deleteConnection( name );
242}
243
The QgsAbstractProviderConnection provides an interface for data provider connections.
Class for storing the component parts of a RDBMS data source URI (e.g.
QByteArray encodedUri() const
Returns the complete encoded URI as a byte array.
bool hasParam(const QString &key) const
Returns true if a parameter with the specified key exists.
void setEncodedUri(const QByteArray &uri)
Sets the complete encoded uri.
void setAuthConfigId(const QString &authcfg)
Sets the authentication configuration ID for the URI.
QgsHttpHeaders httpHeaders() const
Returns http headers.
void setUsername(const QString &username)
Sets the username for the URI.
QString param(const QString &key) const
Returns a generic parameter value corresponding to the specified key.
QString username() const
Returns the username stored in the URI.
void setParam(const QString &key, const QString &value)
Sets a generic parameter value on the URI.
QString password() const
Returns the password stored in the URI.
QString authConfigId() const
Returns any associated authentication configuration ID stored in the URI.
void setHttpHeaders(const QgsHttpHeaders &headers)
Sets headers to headers.
void setPassword(const QString &password)
Sets the password for the URI.
This class implements simple http header management.
This class is a composition of two QSettings instances:
Definition: qgssettings.h:62
QStringList childGroups() const
Returns a list of all key top-level groups that contain keys that can be read using the QSettings obj...
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void beginGroup(const QString &prefix, QgsSettings::Section section=QgsSettings::NoSection)
Appends prefix to the current group.
Definition: qgssettings.cpp:90
void remove(const QString &key, QgsSettings::Section section=QgsSettings::NoSection)
Removes the setting key and any sub-settings of key in a section.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.