mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-03 00:04:37 -05:00
Add convenience method to directly convert QgsProviderSublayerDetails
object to a QgsMapLayer
This commit is contained in:
parent
00db2820cd
commit
69debff405
@ -73,6 +73,24 @@ Returns the layer's URI.
|
|||||||
Sets the layer's ``uri``.
|
Sets the layer's ``uri``.
|
||||||
|
|
||||||
.. seealso:: :py:func:`uri`
|
.. seealso:: :py:func:`uri`
|
||||||
|
%End
|
||||||
|
|
||||||
|
struct LayerOptions
|
||||||
|
{
|
||||||
|
|
||||||
|
explicit LayerOptions( const QgsCoordinateTransformContext &transformContext );
|
||||||
|
%Docstring
|
||||||
|
Constructor for LayerOptions with ``transformContext``.
|
||||||
|
%End
|
||||||
|
|
||||||
|
QgsCoordinateTransformContext transformContext;
|
||||||
|
};
|
||||||
|
|
||||||
|
QgsMapLayer *toLayer( const LayerOptions &options ) const /Factory/;
|
||||||
|
%Docstring
|
||||||
|
Creates a new :py:class:`QgsMapLayer` object associated with the sublayer.
|
||||||
|
|
||||||
|
Caller takes ownership of the returned layer.
|
||||||
%End
|
%End
|
||||||
|
|
||||||
QString name() const;
|
QString name() const;
|
||||||
|
|||||||
@ -215,6 +215,7 @@ set(QGIS_CORE_SRCS
|
|||||||
providers/qgsdataprovider.cpp
|
providers/qgsdataprovider.cpp
|
||||||
providers/qgsprovidermetadata.cpp
|
providers/qgsprovidermetadata.cpp
|
||||||
providers/qgsproviderregistry.cpp
|
providers/qgsproviderregistry.cpp
|
||||||
|
providers/qgsprovidersublayerdetails.cpp
|
||||||
|
|
||||||
providers/arcgis/qgsarcgisportalutils.cpp
|
providers/arcgis/qgsarcgisportalutils.cpp
|
||||||
providers/arcgis/qgsarcgisrestquery.cpp
|
providers/arcgis/qgsarcgisrestquery.cpp
|
||||||
|
|||||||
27
src/core/providers/qgsprovidersublayerdetails.cpp
Normal file
27
src/core/providers/qgsprovidersublayerdetails.cpp
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsprovidersublayerdetails.cpp
|
||||||
|
----------------------------
|
||||||
|
begin : May 2021
|
||||||
|
copyright : (C) 2021 by Nyall Dawson
|
||||||
|
email : nyall dot dawson at gmail dot com
|
||||||
|
***************************************************************************/
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "qgsprovidersublayerdetails.h"
|
||||||
|
#include "qgsmaplayerfactory.h"
|
||||||
|
|
||||||
|
QgsProviderSublayerDetails::LayerOptions::LayerOptions( const QgsCoordinateTransformContext &transformContext )
|
||||||
|
: transformContext( transformContext )
|
||||||
|
{}
|
||||||
|
|
||||||
|
QgsMapLayer *QgsProviderSublayerDetails::toLayer( const LayerOptions &options ) const
|
||||||
|
{
|
||||||
|
return QgsMapLayerFactory::createLayer( mUri, mName, mType, mProviderKey, options.transformContext );
|
||||||
|
}
|
||||||
@ -19,6 +19,7 @@
|
|||||||
#include "qgis_core.h"
|
#include "qgis_core.h"
|
||||||
#include "qgis.h"
|
#include "qgis.h"
|
||||||
#include "qgswkbtypes.h"
|
#include "qgswkbtypes.h"
|
||||||
|
#include "qgscoordinatetransformcontext.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
@ -86,6 +87,27 @@ class CORE_EXPORT QgsProviderSublayerDetails
|
|||||||
*/
|
*/
|
||||||
void setUri( const QString &uri ) { mUri = uri; }
|
void setUri( const QString &uri ) { mUri = uri; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setting options for loading layers.
|
||||||
|
*/
|
||||||
|
struct LayerOptions
|
||||||
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for LayerOptions with \a transformContext.
|
||||||
|
*/
|
||||||
|
explicit LayerOptions( const QgsCoordinateTransformContext &transformContext );
|
||||||
|
|
||||||
|
QgsCoordinateTransformContext transformContext;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new QgsMapLayer object associated with the sublayer.
|
||||||
|
*
|
||||||
|
* Caller takes ownership of the returned layer.
|
||||||
|
*/
|
||||||
|
QgsMapLayer *toLayer( const LayerOptions &options ) const SIP_FACTORY;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the layer's name.
|
* Returns the layer's name.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -11,15 +11,19 @@ __date__ = '16/03/2020'
|
|||||||
__copyright__ = 'Copyright 2020, The QGIS Project'
|
__copyright__ = 'Copyright 2020, The QGIS Project'
|
||||||
|
|
||||||
import qgis # NOQA
|
import qgis # NOQA
|
||||||
|
import os
|
||||||
|
|
||||||
from qgis.core import (
|
from qgis.core import (
|
||||||
QgsProviderRegistry,
|
QgsProviderRegistry,
|
||||||
QgsMapLayerType,
|
QgsMapLayerType,
|
||||||
QgsWkbTypes,
|
QgsWkbTypes,
|
||||||
QgsProviderSublayerDetails,
|
QgsProviderSublayerDetails,
|
||||||
Qgis
|
Qgis,
|
||||||
|
QgsCoordinateTransformContext,
|
||||||
|
QgsVectorLayer
|
||||||
)
|
)
|
||||||
from qgis.testing import start_app, unittest
|
from qgis.testing import start_app, unittest
|
||||||
|
from utilities import unitTestDataPath
|
||||||
|
|
||||||
# Convenience instances in case you may need them
|
# Convenience instances in case you may need them
|
||||||
# to find the srs.db
|
# to find the srs.db
|
||||||
@ -65,6 +69,22 @@ class TestQgsProviderSublayerDetails(unittest.TestCase):
|
|||||||
d.setLayerNumber(13)
|
d.setLayerNumber(13)
|
||||||
self.assertEqual(d.layerNumber(), 13)
|
self.assertEqual(d.layerNumber(), 13)
|
||||||
|
|
||||||
|
def test_to_layer(self):
|
||||||
|
"""
|
||||||
|
Test converting sub layer details to a layer
|
||||||
|
"""
|
||||||
|
details = QgsProviderSublayerDetails()
|
||||||
|
details.setUri(os.path.join(unitTestDataPath(), 'lines.shp'))
|
||||||
|
details.setName('my sub layer')
|
||||||
|
details.setType(QgsMapLayerType.VectorLayer)
|
||||||
|
details.setProviderKey('ogr')
|
||||||
|
|
||||||
|
options = QgsProviderSublayerDetails.LayerOptions(QgsCoordinateTransformContext())
|
||||||
|
ml = details.toLayer(options)
|
||||||
|
self.assertTrue(ml.isValid())
|
||||||
|
self.assertIsInstance(ml, QgsVectorLayer)
|
||||||
|
self.assertEqual(ml.name(), 'my sub layer')
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user