Skip to content

Commit

Permalink
[vector tile] Add encodeUri/decodeUri functions, fix bad layer handle…
Browse files Browse the repository at this point in the history
…r's browse button not working for vector tile layers
  • Loading branch information
nirvn committed Sep 27, 2021
1 parent 84b8232 commit 619aa7c
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 0 deletions.
23 changes: 23 additions & 0 deletions src/core/vectortile/qgsvectortilelayer.cpp
Expand Up @@ -49,6 +49,14 @@ QgsVectorTileLayer::QgsVectorTileLayer( const QString &uri, const QString &baseN
setRenderer( renderer );
}

void QgsVectorTileLayer::setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &, const QgsDataProvider::ProviderOptions &, QgsDataProvider::ReadFlags )
{
mDataSource = dataSource;
mLayerName = baseName;

setValid( loadDataSource() );
}

bool QgsVectorTileLayer::loadDataSource()
{
QgsDataSourceUri dsUri;
Expand Down Expand Up @@ -119,6 +127,12 @@ bool QgsVectorTileLayer::loadDataSource()
}

setCrs( QgsCoordinateReferenceSystem( QStringLiteral( "EPSG:3857" ) ) );

const QgsDataProvider::ProviderOptions providerOptions;
const QgsDataProvider::ReadFlags flags;
mDataProvider.reset( new QgsVectorTileDataProvider( providerOptions, flags ) );
mProviderKey = mDataProvider->name();

return true;
}

Expand Down Expand Up @@ -229,6 +243,15 @@ bool QgsVectorTileLayer::writeXml( QDomNode &layerNode, QDomDocument &doc, const
QDomElement mapLayerNode = layerNode.toElement();
mapLayerNode.setAttribute( QStringLiteral( "type" ), QgsMapLayerFactory::typeToString( QgsMapLayerType::VectorTileLayer ) );

// add provider node
if ( mDataProvider )
{
QDomElement provider = doc.createElement( QStringLiteral( "provider" ) );
const QDomText providerText = doc.createTextNode( providerType() );
provider.appendChild( providerText );
mapLayerNode.appendChild( provider );
}

writeStyleManager( layerNode, doc );

QString errorMsg;
Expand Down
4 changes: 4 additions & 0 deletions src/core/vectortile/qgsvectortilelayer.h
Expand Up @@ -198,6 +198,10 @@ class CORE_EXPORT QgsVectorTileLayer : public QgsMapLayer
std::unique_ptr< QgsDataProvider > mDataProvider;

bool setupArcgisVectorTileServiceConnection( const QString &uri, const QgsDataSourceUri &dataSourceUri );

void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider,
const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags ) override;

};

#ifndef SIP_RUN
Expand Down
31 changes: 31 additions & 0 deletions src/core/vectortile/qgsvectortileprovidermetadata.cpp
Expand Up @@ -55,4 +55,35 @@ void QgsVectorTileProviderMetadata::saveConnection( const QgsAbstractProviderCon
saveConnectionProtected( connection, name );
}

QgsProviderMetadata::ProviderCapabilities QgsVectorTileProviderMetadata::providerCapabilities() const
{
return FileBasedUris;
}

QVariantMap QgsVectorTileProviderMetadata::decodeUri( const QString &uri ) const
{
QgsDataSourceUri dsUri;
dsUri.setEncodedUri( uri );

QVariantMap uriComponents;
uriComponents.insert( QStringLiteral( "type" ), dsUri.param( QStringLiteral( "type" ) ) );
if ( uriComponents[ QStringLiteral( "type" ) ] == QStringLiteral( "mbtiles" ) )
{
uriComponents.insert( QStringLiteral( "path" ), dsUri.param( QStringLiteral( "url" ) ) );
}
else
{
uriComponents.insert( QStringLiteral( "url" ), dsUri.param( QStringLiteral( "url" ) ) );
}
return uriComponents;
}

QString QgsVectorTileProviderMetadata::encodeUri( const QVariantMap &parts ) const
{
QgsDataSourceUri dsUri;
dsUri.setParam( QStringLiteral( "type" ), parts.value( QStringLiteral( "type" ) ).toString() );
dsUri.setParam( QStringLiteral( "url" ), parts.value( parts.contains( QStringLiteral( "path" ) ) ? QStringLiteral( "path" ) : QStringLiteral( "url" ) ).toString() );
return dsUri.encodedUri();
}

///@endcond
5 changes: 5 additions & 0 deletions src/core/vectortile/qgsvectortileprovidermetadata.h
Expand Up @@ -40,6 +40,11 @@ class QgsVectorTileProviderMetadata : public QgsProviderMetadata
void deleteConnection( const QString &name ) override;
void saveConnection( const QgsAbstractProviderConnection *connection, const QString &name ) override;

ProviderCapabilities providerCapabilities() const override;

QVariantMap decodeUri( const QString &uri ) const override;
QString encodeUri( const QVariantMap &parts ) const override;

};

///@endcond
Expand Down

0 comments on commit 619aa7c

Please sign in to comment.