mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-15 00:02:52 -04:00
[feature] api for adding vector tile layers
This is code-only, not visible to users change and prerequisite for exposing vector tile layer in the Data Source manager
This commit is contained in:
parent
3b3c7d8012
commit
39e397ebd0
@ -767,6 +767,13 @@ Adds a raster layer to the current project, from the specified raster data provi
|
||||
virtual QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) = 0;
|
||||
%Docstring
|
||||
Adds a mesh layer to the current project.
|
||||
%End
|
||||
|
||||
virtual QgsVectorTileLayer *addVectorTileLayer( const QString &url, const QString &baseName ) = 0;
|
||||
%Docstring
|
||||
Adds a vector tile layer to the current project.
|
||||
|
||||
.. versionadded:: 3.14
|
||||
%End
|
||||
|
||||
virtual bool addProject( const QString &project ) = 0;
|
||||
|
@ -92,6 +92,13 @@ will be used.
|
||||
Emitted when a mesh layer has been selected for addition.
|
||||
|
||||
.. versionadded:: 3.4
|
||||
%End
|
||||
|
||||
void addVectorTileLayer( const QString &url, const QString &baseName );
|
||||
%Docstring
|
||||
Emitted when a vector tile layer has been selected for addition.
|
||||
|
||||
.. versionadded:: 3.14
|
||||
%End
|
||||
|
||||
void addVectorLayers( const QStringList &layerList, const QString &encoding, const QString &dataSourceType );
|
||||
|
@ -2323,6 +2323,7 @@ void QgisApp::dataSourceManager( const QString &pageName )
|
||||
connect( mDataSourceManagerDialog, SIGNAL( addVectorLayers( QStringList const &, QString const &, QString const & ) ),
|
||||
this, SLOT( addVectorLayers( QStringList const &, QString const &, QString const & ) ) );
|
||||
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::addMeshLayer, this, &QgisApp::addMeshLayer );
|
||||
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::addVectorTileLayer, this, &QgisApp::addVectorTileLayer );
|
||||
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::showStatusMessage, this, &QgisApp::showStatusMessage );
|
||||
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::addDatabaseLayers, this, &QgisApp::addDatabaseLayers );
|
||||
connect( mDataSourceManagerDialog, &QgsDataSourceManagerDialog::replaceSelectedVectorLayer, this, &QgisApp::replaceSelectedVectorLayer );
|
||||
@ -5458,7 +5459,6 @@ bool QgisApp::addVectorLayersPrivate( const QStringList &layerQStringList, const
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
QgsMeshLayer *QgisApp::addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey )
|
||||
{
|
||||
return addMeshLayerPrivate( url, baseName, providerKey );
|
||||
@ -5538,6 +5538,46 @@ QgsMeshLayer *QgisApp::addMeshLayerPrivate( const QString &url, const QString &b
|
||||
return layer.release();
|
||||
}
|
||||
|
||||
QgsVectorTileLayer *QgisApp::addVectorTileLayer( const QString &url, const QString &baseName )
|
||||
{
|
||||
return addVectorTileLayerPrivate( url, baseName );
|
||||
}
|
||||
|
||||
QgsVectorTileLayer *QgisApp::addVectorTileLayerPrivate( const QString &url, const QString &baseName, const bool guiWarning )
|
||||
{
|
||||
QgsCanvasRefreshBlocker refreshBlocker;
|
||||
QgsSettings settings;
|
||||
|
||||
QString base( baseName );
|
||||
|
||||
if ( settings.value( QStringLiteral( "qgis/formatLayerName" ), false ).toBool() )
|
||||
{
|
||||
base = QgsMapLayer::formatLayerName( base );
|
||||
}
|
||||
|
||||
QgsDebugMsg( "completeBaseName: " + base );
|
||||
|
||||
// create the layer
|
||||
std::unique_ptr<QgsVectorTileLayer> layer( new QgsVectorTileLayer( url, base ) );
|
||||
|
||||
if ( !layer || !layer->isValid() )
|
||||
{
|
||||
if ( guiWarning )
|
||||
{
|
||||
QString msg = tr( "%1 is not a valid or recognized data source." ).arg( url );
|
||||
visibleMessageBar()->pushMessage( tr( "Invalid Data Source" ), msg, Qgis::Critical, messageTimeout() );
|
||||
}
|
||||
|
||||
// since the layer is bad, stomp on it
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
QgsProject::instance()->addMapLayer( layer.get() );
|
||||
activateDeactivateLayerRelatedActions( activeLayer() );
|
||||
|
||||
return layer.release();
|
||||
}
|
||||
|
||||
// present a dialog to choose zipitem layers
|
||||
bool QgisApp::askUserForZipItemLayers( const QString &path )
|
||||
{
|
||||
|
@ -98,6 +98,7 @@ class QgsUndoWidget;
|
||||
class QgsUserInputWidget;
|
||||
class QgsVectorLayer;
|
||||
class QgsVectorLayerTools;
|
||||
class QgsVectorTileLayer;
|
||||
class QgsWelcomePage;
|
||||
class QgsOptionsWidgetFactory;
|
||||
class QgsStatusBar;
|
||||
@ -1022,8 +1023,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
|
||||
/**
|
||||
* Add a raster layer directly without prompting user for location
|
||||
The caller must provide information compatible with the provider plugin
|
||||
using the uri and baseName. The provider can use these
|
||||
parameters in any way necessary to initialize the layer. The baseName
|
||||
using the \a uri and \a baseName. The provider can use these
|
||||
parameters in any way necessary to initialize the layer. The \a baseName
|
||||
parameter is used in the Map Legend so it should be formed in a meaningful
|
||||
way.
|
||||
*/
|
||||
@ -1032,8 +1033,8 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
|
||||
/**
|
||||
* Add a vector layer directly without prompting user for location
|
||||
The caller must provide information compatible with the provider plugin
|
||||
using the vectorLayerPath and baseName. The provider can use these
|
||||
parameters in any way necessary to initialize the layer. The baseName
|
||||
using the \a vectorLayerPath and \a baseName. The provider can use these
|
||||
parameters in any way necessary to initialize the layer. The \a baseName
|
||||
parameter is used in the Map Legend so it should be formed in a meaningful
|
||||
way.
|
||||
*/
|
||||
@ -1041,10 +1042,23 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
|
||||
|
||||
/**
|
||||
* Adds a mesh layer directly without prompting user for location
|
||||
* \returns true if successfully added layer
|
||||
* The caller must provide information compatible with the provider plugin
|
||||
* using the \a url and \a baseName. The provider can use these
|
||||
* parameters in any way necessary to initialize the layer. The \a baseName
|
||||
* parameter is used in the Map Legend so it should be formed in a meaningful
|
||||
* way.
|
||||
*/
|
||||
QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey );
|
||||
|
||||
/**
|
||||
* Adds a vector tile layer directly without prompting user for location
|
||||
* The caller must provide information needed for layer construction
|
||||
* using the \a url and \a baseName. The \a baseName parameter is used
|
||||
* in the Map Legend so it should be formed in a meaningful way.
|
||||
* \since QGIS 3.14
|
||||
*/
|
||||
QgsVectorTileLayer *addVectorTileLayer( const QString &url, const QString &baseName );
|
||||
|
||||
/**
|
||||
* \brief overloaded version of the private addLayer method that takes a list of
|
||||
* file names instead of prompting user with a dialog.
|
||||
@ -1915,6 +1929,9 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
|
||||
QgsMeshLayer *addMeshLayerPrivate( const QString &uri, const QString &baseName,
|
||||
const QString &providerKey, bool guiWarning = true );
|
||||
|
||||
//! Open a vector tile layer - this is the generic function which takes all parameters
|
||||
QgsVectorTileLayer *addVectorTileLayerPrivate( const QString &uri, const QString &baseName, bool guiWarning = true );
|
||||
|
||||
bool addVectorLayersPrivate( const QStringList &layerQStringList, const QString &enc, const QString &dataSourceType, bool guiWarning = true );
|
||||
QgsVectorLayer *addVectorLayerPrivate( const QString &vectorLayerPath, const QString &baseName, const QString &providerKey, bool guiWarning = true );
|
||||
|
||||
|
@ -162,6 +162,11 @@ QgsMeshLayer *QgisAppInterface::addMeshLayer( const QString &url, const QString
|
||||
return qgis->addMeshLayer( url, baseName, providerKey );
|
||||
}
|
||||
|
||||
QgsVectorTileLayer *QgisAppInterface::addVectorTileLayer( const QString &url, const QString &baseName )
|
||||
{
|
||||
return qgis->addVectorTileLayer( url, baseName );
|
||||
}
|
||||
|
||||
bool QgisAppInterface::addProject( const QString &projectName )
|
||||
{
|
||||
return qgis->addProject( projectName );
|
||||
|
@ -70,6 +70,7 @@ class APP_EXPORT QgisAppInterface : public QgisInterface
|
||||
QgsRasterLayer *addRasterLayer( const QString &rasterLayerPath, const QString &baseName ) override;
|
||||
QgsRasterLayer *addRasterLayer( const QString &url, const QString &baseName, const QString &providerKey ) override;
|
||||
QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) override;
|
||||
QgsVectorTileLayer *addVectorTileLayer( const QString &url, const QString &baseName ) override;
|
||||
bool addProject( const QString &projectName ) override;
|
||||
bool newProject( bool promptToSaveFlag = false ) override;
|
||||
void reloadConnections( ) override;
|
||||
|
@ -57,6 +57,7 @@ class QgsPluginManagerInterface;
|
||||
class QgsRasterLayer;
|
||||
class QgsVectorLayer;
|
||||
class QgsVectorLayerTools;
|
||||
class QgsVectorTileLayer;
|
||||
class QgsOptionsWidgetFactory;
|
||||
class QgsLocatorFilter;
|
||||
class QgsStatusBar;
|
||||
@ -668,6 +669,12 @@ class GUI_EXPORT QgisInterface : public QObject
|
||||
*/
|
||||
virtual QgsMeshLayer *addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey ) = 0;
|
||||
|
||||
/**
|
||||
* Adds a vector tile layer to the current project.
|
||||
* \since QGIS 3.14
|
||||
*/
|
||||
virtual QgsVectorTileLayer *addVectorTileLayer( const QString &url, const QString &baseName ) = 0;
|
||||
|
||||
//! Adds (opens) a project
|
||||
virtual bool addProject( const QString &project ) = 0;
|
||||
|
||||
|
@ -37,7 +37,6 @@ const QgsMapCanvas *QgsAbstractDataSourceWidget::mapCanvas() const
|
||||
|
||||
void QgsAbstractDataSourceWidget::setupButtons( QDialogButtonBox *buttonBox )
|
||||
{
|
||||
|
||||
buttonBox->setStandardButtons( QDialogButtonBox::Apply | QDialogButtonBox::Close | QDialogButtonBox::Help );
|
||||
#ifdef Q_OS_MACX
|
||||
buttonBox->setStyleSheet( "* { button-layout: 2 }" );
|
||||
@ -52,10 +51,8 @@ void QgsAbstractDataSourceWidget::setupButtons( QDialogButtonBox *buttonBox )
|
||||
QPushButton *closeButton = buttonBox->button( QDialogButtonBox::Close );
|
||||
closeButton->setToolTip( tr( "Close this dialog without adding any layer" ) );
|
||||
connect( closeButton, &QPushButton::clicked, this, &QgsAbstractDataSourceWidget::reject );
|
||||
|
||||
}
|
||||
|
||||
|
||||
void QgsAbstractDataSourceWidget::setMapCanvas( const QgsMapCanvas *mapCanvas )
|
||||
{
|
||||
mMapCanvas = mapCanvas;
|
||||
@ -68,4 +65,3 @@ void QgsAbstractDataSourceWidget::addButtonClicked()
|
||||
void QgsAbstractDataSourceWidget::reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -106,6 +106,12 @@ class GUI_EXPORT QgsAbstractDataSourceWidget : public QDialog
|
||||
*/
|
||||
void addMeshLayer( const QString &url, const QString &baseName, const QString &providerKey );
|
||||
|
||||
/**
|
||||
* Emitted when a vector tile layer has been selected for addition.
|
||||
* \since QGIS 3.14
|
||||
*/
|
||||
void addVectorTileLayer( const QString &url, const QString &baseName );
|
||||
|
||||
/**
|
||||
* Emitted when one or more OGR supported layers are selected for addition
|
||||
* \param layerList list of layers protocol URIs
|
||||
|
@ -129,7 +129,6 @@ void QgsDataSourceManagerDialog::reset()
|
||||
if ( dataSourceWidget )
|
||||
dataSourceWidget->reset();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void QgsDataSourceManagerDialog::rasterLayerAdded( const QString &uri, const QString &baseName, const QString &providerKey )
|
||||
@ -147,7 +146,6 @@ void QgsDataSourceManagerDialog::vectorLayersAdded( const QStringList &layerQStr
|
||||
emit addVectorLayers( layerQStringList, enc, dataSourceType );
|
||||
}
|
||||
|
||||
|
||||
void QgsDataSourceManagerDialog::addProviderDialog( QgsAbstractDataSourceWidget *dlg, const QString &providerKey, const QString &providerName, const QIcon &icon, const QString &toolTip )
|
||||
{
|
||||
mPageNames.append( providerKey );
|
||||
@ -187,7 +185,8 @@ void QgsDataSourceManagerDialog::makeConnections( QgsAbstractDataSourceWidget *d
|
||||
this, SIGNAL( addRasterLayer( QString const &, QString const &, QString const & ) ) );
|
||||
// Mesh
|
||||
connect( dlg, &QgsAbstractDataSourceWidget::addMeshLayer, this, &QgsDataSourceManagerDialog::addMeshLayer );
|
||||
|
||||
// Vector tile
|
||||
connect( dlg, &QgsAbstractDataSourceWidget::addVectorTileLayer, this, &QgsDataSourceManagerDialog::addVectorTileLayer );
|
||||
// Virtual
|
||||
connect( dlg, SIGNAL( replaceVectorLayer( QString, QString, QString, QString ) ),
|
||||
this, SIGNAL( replaceSelectedVectorLayer( QString, QString, QString, QString ) ) );
|
||||
@ -202,4 +201,3 @@ void QgsDataSourceManagerDialog::showEvent( QShowEvent *e )
|
||||
QgsOptionsDialogBase::showEvent( e );
|
||||
resizeAlltabs( ui->mOptionsStackedWidget->currentIndex() );
|
||||
}
|
||||
|
||||
|
@ -111,10 +111,17 @@ class GUI_EXPORT QgsDataSourceManagerDialog : public QgsOptionsDialogBase, priva
|
||||
void addVectorLayer( const QString &vectorLayerPath, const QString &baseName, const QString &providerKey );
|
||||
|
||||
/**
|
||||
* Emitted when a mesh layer was selected for addition: for signal forwarding to QgisApp\
|
||||
* Emitted when a mesh layer was selected for addition: for signal forwarding to QgisApp
|
||||
* \since QGIS 3.4
|
||||
*/
|
||||
void addMeshLayer( const QString &uri, const QString &baseName, const QString &providerKey );
|
||||
|
||||
/**
|
||||
* Emitted when a vector tile layer was selected for addition: for signal forwarding to QgisApp
|
||||
* \since QGIS 3.14
|
||||
*/
|
||||
void addVectorTileLayer( const QString &uri, const QString &baseName );
|
||||
|
||||
//! Replace the selected layer by a vector layer defined by uri, layer name, data source uri
|
||||
void replaceSelectedVectorLayer( const QString &oldId, const QString &uri, const QString &layerName, const QString &provider );
|
||||
//! Emitted when a one or more layer were selected for addition: for signal forwarding to QgisApp
|
||||
|
Loading…
x
Reference in New Issue
Block a user