19
19
#include " qgsvectortileloader.h"
20
20
#include " qgsapplication.h"
21
21
#include " qgslogger.h"
22
+ #include " qgsprovidersublayerdetails.h"
23
+ #include " qgsproviderutils.h"
22
24
23
25
#include < QIcon>
26
+ #include < QFileInfo>
24
27
25
28
// /@cond PRIVATE
26
29
@@ -225,6 +228,13 @@ QgsVtpkVectorTileDataProviderMetadata::QgsVtpkVectorTileDataProviderMetadata()
225
228
{
226
229
}
227
230
231
+ QgsProviderMetadata::ProviderMetadataCapabilities QgsVtpkVectorTileDataProviderMetadata::capabilities () const
232
+ {
233
+ return ProviderMetadataCapability::LayerTypesForUri
234
+ | ProviderMetadataCapability::PriorityForUri
235
+ | ProviderMetadataCapability::QuerySublayers;
236
+ }
237
+
228
238
QgsVtpkVectorTileDataProvider *QgsVtpkVectorTileDataProviderMetadata::createProvider ( const QString &uri, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
229
239
{
230
240
return new QgsVtpkVectorTileDataProvider ( uri, options, flags );
@@ -240,13 +250,71 @@ QgsProviderMetadata::ProviderCapabilities QgsVtpkVectorTileDataProviderMetadata:
240
250
return FileBasedUris;
241
251
}
242
252
253
+ QList<QgsProviderSublayerDetails> QgsVtpkVectorTileDataProviderMetadata::querySublayers ( const QString &uri, Qgis::SublayerQueryFlags, QgsFeedback * ) const
254
+ {
255
+ QString fileName;
256
+ const QFileInfo fi ( uri );
257
+ if ( fi.isFile () )
258
+ {
259
+ fileName = uri;
260
+ }
261
+ else
262
+ {
263
+ const QVariantMap parts = decodeUri ( uri );
264
+ fileName = parts.value ( QStringLiteral ( " path" ) ).toString ();
265
+ }
266
+
267
+ if ( fileName.isEmpty () )
268
+ return {};
269
+
270
+ if ( QFileInfo ( fileName ).suffix ().compare ( QLatin1String ( " vtpk" ), Qt::CaseInsensitive ) == 0 )
271
+ {
272
+ QVariantMap parts;
273
+ parts.insert ( QStringLiteral ( " path" ), fileName );
274
+
275
+ QgsProviderSublayerDetails details;
276
+ details.setUri ( encodeUri ( parts ) );
277
+ details.setProviderKey ( key () );
278
+ details.setType ( Qgis::LayerType::VectorTile );
279
+ details.setName ( QgsProviderUtils::suggestLayerNameFromFilePath ( fileName ) );
280
+ return {details};
281
+ }
282
+ else
283
+ {
284
+ return {};
285
+ }
286
+ }
287
+
288
+ int QgsVtpkVectorTileDataProviderMetadata::priorityForUri ( const QString &uri ) const
289
+ {
290
+ if ( validLayerTypesForUri ( uri ).contains ( Qgis::LayerType::VectorTile ) )
291
+ return 100 ;
292
+
293
+ return 0 ;
294
+ }
295
+
296
+ QList<Qgis::LayerType> QgsVtpkVectorTileDataProviderMetadata::validLayerTypesForUri ( const QString &uri ) const
297
+ {
298
+ const QFileInfo fi ( uri );
299
+ if ( fi.isFile () && fi.suffix ().compare ( QLatin1String ( " vtpk" ), Qt::CaseInsensitive ) == 0 )
300
+ {
301
+ return { Qgis::LayerType::VectorTile };
302
+ }
303
+
304
+ const QVariantMap parts = decodeUri ( uri );
305
+ if ( parts.value ( QStringLiteral ( " path" ) ).toString ().endsWith ( " .vtpk" , Qt::CaseSensitivity::CaseInsensitive ) )
306
+ return { Qgis::LayerType::VectorTile };
307
+
308
+ return {};
309
+ }
310
+
243
311
QVariantMap QgsVtpkVectorTileDataProviderMetadata::decodeUri ( const QString &uri ) const
244
312
{
245
313
QgsDataSourceUri dsUri;
246
314
dsUri.setEncodedUri ( uri );
247
315
248
316
QVariantMap uriComponents;
249
- uriComponents.insert ( QStringLiteral ( " type" ), dsUri. param ( QStringLiteral ( " type " ) ) );
317
+ uriComponents.insert ( QStringLiteral ( " type" ), QStringLiteral ( " vtpk " ) );
250
318
uriComponents.insert ( QStringLiteral ( " path" ), dsUri.param ( QStringLiteral ( " url" ) ) );
251
319
252
320
return uriComponents;
@@ -255,7 +323,7 @@ QVariantMap QgsVtpkVectorTileDataProviderMetadata::decodeUri( const QString &uri
255
323
QString QgsVtpkVectorTileDataProviderMetadata::encodeUri ( const QVariantMap &parts ) const
256
324
{
257
325
QgsDataSourceUri dsUri;
258
- dsUri.setParam ( QStringLiteral ( " type" ), parts. value ( QStringLiteral ( " type " ) ). toString ( ) );
326
+ dsUri.setParam ( QStringLiteral ( " type" ), QStringLiteral ( " vtpk " ) );
259
327
dsUri.setParam ( QStringLiteral ( " url" ), parts.value ( parts.contains ( QStringLiteral ( " path" ) ) ? QStringLiteral ( " path" ) : QStringLiteral ( " url" ) ).toString () );
260
328
return dsUri.encodedUri ();
261
329
}
0 commit comments