QGIS API Documentation 3.39.0-Master (3aed037ce22)
Loading...
Searching...
No Matches
qgsmaplayer.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaplayer.h - description
3 -------------------
4 begin : Fri Jun 28 2002
5 copyright : (C) 2002 by Gary E.Sherman
6 email : sherman at mrcc.com
7***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSMAPLAYER_H
19#define QGSMAPLAYER_H
20
21#include "qgis_core.h"
22#include <QDateTime>
23#include <QDomNode>
24#include <QImage>
25#include <QObject>
26#include <QPainter>
27#include <QUndoStack>
28#include <QVariant>
29#include <QIcon>
30#include <QSet>
31
32#include "qgis_sip.h"
33#include "qgserror.h"
35#include "qgsrectangle.h"
38#include "qgslayermetadata.h"
40#include "qgsreadwritecontext.h"
41#include "qgsdataprovider.h"
42#include "qgis.h"
43#include "qgslogger.h"
44
46class QgsDataProvider;
50class QgsProject;
56
57class QDomDocument;
58class QKeyEvent;
59class QPainter;
61class QgsBox3D;
62
63/*
64 * Constants used to describe copy-paste MIME types
65 */
66#define QGSCLIPBOARD_MAPLAYER_MIME "application/qgis.maplayer"
67
68
74class CORE_EXPORT QgsMapLayer : public QObject
75{
76 Q_OBJECT
77
78 Q_PROPERTY( QString id READ id WRITE setId NOTIFY idChanged )
79 Q_PROPERTY( QString name READ name WRITE setName NOTIFY nameChanged )
80 Q_PROPERTY( int autoRefreshInterval READ autoRefreshInterval WRITE setAutoRefreshInterval NOTIFY autoRefreshIntervalChanged )
81 Q_PROPERTY( QgsLayerMetadata metadata READ metadata WRITE setMetadata NOTIFY metadataChanged )
82 Q_PROPERTY( QgsCoordinateReferenceSystem crs READ crs WRITE setCrs NOTIFY crsChanged )
83 Q_PROPERTY( QgsCoordinateReferenceSystem verticalCrs READ verticalCrs WRITE setVerticalCrs NOTIFY verticalCrsChanged )
84 Q_PROPERTY( QgsCoordinateReferenceSystem crs3D READ crs3D NOTIFY crs3DChanged )
85 Q_PROPERTY( Qgis::LayerType type READ type CONSTANT )
86 Q_PROPERTY( bool isValid READ isValid NOTIFY isValidChanged )
87 Q_PROPERTY( double opacity READ opacity WRITE setOpacity NOTIFY opacityChanged )
88 Q_PROPERTY( QString mapTipTemplate READ mapTipTemplate WRITE setMapTipTemplate NOTIFY mapTipTemplateChanged )
89 Q_PROPERTY( bool mapTipsEnabled READ mapTipsEnabled WRITE setMapTipsEnabled NOTIFY mapTipsEnabledChanged )
90
91#ifdef SIP_RUN
93 QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( sipCpp );
94
95 sipType = 0;
96
97 if ( layer )
98 {
99 switch ( layer->type() )
100 {
102 sipType = sipType_QgsVectorLayer;
103 break;
105 sipType = sipType_QgsRasterLayer;
106 break;
108 sipType = sipType_QgsPluginLayer;
109 break;
111 sipType = sipType_QgsMeshLayer;
112 break;
114 sipType = sipType_QgsVectorTileLayer;
115 break;
117 sipType = sipType_QgsAnnotationLayer;
118 break;
120 sipType = sipType_QgsPointCloudLayer;
121 break;
123 sipType = sipType_QgsGroupLayer;
124 break;
126 sipType = sipType_QgsTiledSceneLayer;
127 break;
128 default:
129 sipType = nullptr;
130 break;
131 }
132 }
133 SIP_END
134#endif
135
136 public:
137
142 {
143 Style = 0,
145 };
146
153 {
154 Identifiable = 1 << 0,
155 Removable = 1 << 1,
156 Searchable = 1 << 2,
157 Private = 1 << 3,
158 };
159 Q_ENUM( LayerFlag )
160 Q_DECLARE_FLAGS( LayerFlags, LayerFlag )
161 Q_FLAG( LayerFlags )
162
168 {
169 LayerConfiguration = 1 << 0,
170 Symbology = 1 << 1,
171 Symbology3D = 1 << 2,
172 Labeling = 1 << 3,
173 Fields = 1 << 4,
174 Forms = 1 << 5,
175 Actions = 1 << 6,
176 MapTips = 1 << 7,
177 Diagrams = 1 << 8,
178 AttributeTable = 1 << 9,
179 Rendering = 1 << 10,
180 CustomProperties = 1 << 11,
181 GeometryOptions = 1 << 12,
182 Relations = 1 << 13,
183 Temporal = 1 << 14,
184 Legend = 1 << 15,
185 Elevation = 1 << 16,
186 Notes = 1 << 17,
187 AllStyleCategories = LayerConfiguration | Symbology | Symbology3D | Labeling | Fields | Forms | Actions |
188 MapTips | Diagrams | AttributeTable | Rendering | CustomProperties | GeometryOptions | Relations | Temporal | Legend | Elevation | Notes,
189 };
190 Q_ENUM( StyleCategory )
191 Q_DECLARE_FLAGS( StyleCategories, StyleCategory )
192 Q_FLAG( StyleCategories )
193
200 QgsMapLayer( Qgis::LayerType type = Qgis::LayerType::Vector, const QString &name = QString(), const QString &source = QString() );
201
202 ~QgsMapLayer() override;
203
204 QgsMapLayer( const QgsMapLayer & ) = delete;
205 QgsMapLayer &operator=( const QgsMapLayer & ) = delete;
206
212 virtual QgsMapLayer *clone() const = 0;
213
217 Qgis::LayerType type() const;
218
229 QgsMapLayer::LayerFlags flags() const;
230
241 void setFlags( QgsMapLayer::LayerFlags flags );
242
252 virtual Qgis::MapLayerProperties properties() const;
253
258 static QString extensionPropertyType( PropertyType type );
259
266 QString id() const;
267
283 bool setId( const QString &id );
284
289 void setName( const QString &name );
290
295 QString name() const;
296
300 Q_INVOKABLE virtual QgsDataProvider *dataProvider();
301
306 virtual const QgsDataProvider *dataProvider() const SIP_SKIP;
307
313 Q_DECL_DEPRECATED void setShortName( const QString &shortName ) SIP_DEPRECATED;
314
320 Q_DECL_DEPRECATED QString shortName() const SIP_DEPRECATED;
321
327 Q_DECL_DEPRECATED void setTitle( const QString &title ) SIP_DEPRECATED;
328
334 Q_DECL_DEPRECATED QString title() const SIP_DEPRECATED;
335
341 Q_DECL_DEPRECATED void setAbstract( const QString &abstract ) SIP_DEPRECATED;
342
348 Q_DECL_DEPRECATED QString abstract() const SIP_DEPRECATED;
349
355 Q_DECL_DEPRECATED void setKeywordList( const QString &keywords ) SIP_DEPRECATED;
356
362 Q_DECL_DEPRECATED QString keywordList() const SIP_DEPRECATED;
363
369 Q_DECL_DEPRECATED void setDataUrl( const QString &dataUrl ) SIP_DEPRECATED;
370
376 Q_DECL_DEPRECATED QString dataUrl() const SIP_DEPRECATED;
377
383 Q_DECL_DEPRECATED void setDataUrlFormat( const QString &dataUrlFormat ) SIP_DEPRECATED;
384
390 Q_DECL_DEPRECATED QString dataUrlFormat() const SIP_DEPRECATED;
391
397 Q_DECL_DEPRECATED void setAttribution( const QString &attrib ) SIP_DEPRECATED;
398
404 Q_DECL_DEPRECATED QString attribution() const SIP_DEPRECATED;
405
411 Q_DECL_DEPRECATED void setAttributionUrl( const QString &attribUrl ) SIP_DEPRECATED;
412
418 Q_DECL_DEPRECATED QString attributionUrl() const SIP_DEPRECATED;
419
420 /* Layer metadataUrl information */
421
426 QgsMapLayerServerProperties *serverProperties() { return mServerProperties.get(); };
427
432 const QgsMapLayerServerProperties *serverProperties() const { return mServerProperties.get(); } SIP_SKIP;
433
442 Q_DECL_DEPRECATED void setMetadataUrl( const QString &metaUrl ) SIP_DEPRECATED;
443
453 Q_DECL_DEPRECATED QString metadataUrl() const SIP_DEPRECATED;
454
463 Q_DECL_DEPRECATED void setMetadataUrlType( const QString &metaUrlType ) SIP_DEPRECATED;
464
474 Q_DECL_DEPRECATED QString metadataUrlType() const SIP_DEPRECATED;
475
484 Q_DECL_DEPRECATED void setMetadataUrlFormat( const QString &metaUrlFormat ) SIP_DEPRECATED;
485
495 Q_DECL_DEPRECATED QString metadataUrlFormat() const SIP_DEPRECATED;
496
502 void setBlendMode( QPainter::CompositionMode blendMode );
503
508 QPainter::CompositionMode blendMode() const;
509
518 virtual void setOpacity( double opacity );
519
528 virtual double opacity() const;
529
531 bool readOnly() const { return isReadOnly(); }
532
536 Q_INVOKABLE virtual void reload() {}
537
542
544 virtual QgsRectangle extent() const;
545
550 virtual QgsBox3D extent3D() const;
551
560 QgsRectangle wgs84Extent( bool forceRecalculate = false ) const;
561
567 bool isValid() const;
568
576 QString publicSource( bool hidePassword = false ) const;
577
583 QString source() const;
584
589 virtual QStringList subLayers() const;
590
595 virtual void setLayerOrder( const QStringList &layers );
596
602 virtual void setSubLayerVisibility( const QString &name, bool visible );
603
610 virtual bool supportsEditing() const;
611
613 virtual bool isEditable() const;
614
620 virtual bool isModified() const;
621
625 virtual bool isSpatial() const;
626
636 virtual bool isTemporary() const;
637
643 {
644 FlagDontResolveLayers = 1 << 0,
645 FlagTrustLayerMetadata = 1 << 1,
646 FlagReadExtentFromXml = 1 << 2,
647 FlagForceReadOnly = 1 << 3,
648 };
649 Q_DECLARE_FLAGS( ReadFlags, ReadFlag )
650
651
669 bool readLayerXml( const QDomElement &layerElement, QgsReadWriteContext &context,
670 QgsMapLayer::ReadFlags flags = QgsMapLayer::ReadFlags(), QgsDataProvider *preloadedProvider SIP_TRANSFER = nullptr );
671
689 bool writeLayerXml( QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context ) const;
690
694 virtual void resolveReferences( QgsProject *project );
695
700 Q_INVOKABLE QStringList customPropertyKeys() const;
701
707 Q_INVOKABLE void setCustomProperty( const QString &key, const QVariant &value );
708
713 Q_INVOKABLE QVariant customProperty( const QString &value, const QVariant &defaultValue = QVariant() ) const;
714
718 void setCustomProperties( const QgsObjectCustomProperties &properties );
719
725 const QgsObjectCustomProperties &customProperties() const;
726
736 virtual int listStylesInDatabase( QStringList &ids SIP_OUT, QStringList &names SIP_OUT,
737 QStringList &descriptions SIP_OUT, QString &msgError SIP_OUT );
738
742 virtual QString getStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
743
750 virtual bool deleteStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
751
768 virtual void saveStyleToDatabase( const QString &name, const QString &description,
769 bool useAsDefault, const QString &uiFileContent,
770 QString &msgError SIP_OUT,
772
773
774 // TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "a style WAS found but an error occurred loading it" vs "no style was found".
775 // The first (style found, error occurred loading it) should trigger a user-facing warning, whereas the second (no style found) isn't reflective of an error at all.
776
785 virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag SIP_OUT, bool loadFromLocalDb,
788
789#ifndef SIP_RUN
790
801 template <class T>
802 T customEnumProperty( const QString &key, const T &defaultValue )
803 {
804 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
805 Q_ASSERT( metaEnum.isValid() );
806 if ( !metaEnum.isValid() )
807 {
808 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
809 }
810
811 T v;
812 bool ok = false;
813
814 if ( metaEnum.isValid() )
815 {
816 // read as string
817 QByteArray ba = customProperty( key, metaEnum.valueToKey( static_cast<int>( defaultValue ) ) ).toString().toUtf8();
818 const char *vs = ba.data();
819 v = static_cast<T>( metaEnum.keyToValue( vs, &ok ) );
820 if ( ok )
821 return v;
822 }
823
824 // if failed, try to read as int (old behavior)
825 // this code shall be removed later
826 // then the method could be marked as const
827 v = static_cast<T>( customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok ) );
828 if ( metaEnum.isValid() )
829 {
830 if ( !ok || !metaEnum.valueToKey( static_cast<int>( v ) ) )
831 {
832 v = defaultValue;
833 }
834 else
835 {
836 // found property as an integer
837 // convert the property to the new form (string)
838 setCustomEnumProperty( key, v );
839 }
840 }
841
842 return v;
843 }
844
853 template <class T>
854 void setCustomEnumProperty( const QString &key, const T &value )
855 {
856 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
857 Q_ASSERT( metaEnum.isValid() );
858 if ( metaEnum.isValid() )
859 {
860 setCustomProperty( key, metaEnum.valueToKey( static_cast<int>( value ) ) );
861 }
862 else
863 {
864 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
865 }
866 }
867
879 template <class T>
880 T customFlagProperty( const QString &key, const T &defaultValue )
881 {
882 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
883 Q_ASSERT( metaEnum.isValid() );
884 if ( !metaEnum.isValid() )
885 {
886 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
887 }
888
889 T v = defaultValue;
890 bool ok = false;
891
892 if ( metaEnum.isValid() )
893 {
894 // read as string
895 QByteArray ba = customProperty( key, metaEnum.valueToKeys( defaultValue ) ).toString().toUtf8();
896 const char *vs = ba.data();
897 v = static_cast<T>( metaEnum.keysToValue( vs, &ok ) );
898 }
899 if ( !ok )
900 {
901 // if failed, try to read as int
902 const int intValue = customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok );
903 if ( metaEnum.isValid() )
904 {
905 if ( ok )
906 {
907 // check that the int value does correspond to a flag
908 // see https://stackoverflow.com/a/68495949/1548052
909 const QByteArray keys = metaEnum.valueToKeys( intValue );
910 const int intValueCheck = metaEnum.keysToValue( keys );
911 if ( intValue != intValueCheck )
912 {
913 v = defaultValue;
914 }
915 else
916 {
917 // found property as an integer
918 v = T( intValue );
919 // convert the property to the new form (string)
920 // this code could be removed
921 // then the method could be marked as const
922 setCustomFlagProperty( key, v );
923 }
924 }
925 else
926 {
927 v = defaultValue;
928 }
929 }
930 }
931
932 return v;
933 }
934
943 template <class T>
944 void setCustomFlagProperty( const QString &key, const T &value )
945 {
946 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
947 Q_ASSERT( metaEnum.isValid() );
948 if ( metaEnum.isValid() )
949 {
950 setCustomProperty( key, metaEnum.valueToKeys( value ) );
951 }
952 else
953 {
954 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
955 }
956 }
957#endif
958
959
964 void removeCustomProperty( const QString &key );
965
971 virtual QgsError error() const;
972
985
1004 QgsCoordinateReferenceSystem verticalCrs() const;
1005
1024 QgsCoordinateReferenceSystem crs3D() const;
1025
1036 void setCrs( const QgsCoordinateReferenceSystem &srs, bool emitSignal = true );
1037
1057 bool setVerticalCrs( const QgsCoordinateReferenceSystem &crs, QString *errorMessage SIP_OUT = nullptr );
1058
1064 QgsCoordinateTransformContext transformContext( ) const;
1065
1066
1071 static QString formatLayerName( const QString &name );
1072
1079 virtual QString metadataUri() const;
1080
1086 void exportNamedMetadata( QDomDocument &doc, QString &errorMsg ) const;
1087
1096 virtual QString saveDefaultMetadata( bool &resultFlag SIP_OUT );
1097
1111 QString saveNamedMetadata( const QString &uri, bool &resultFlag );
1112
1113 // TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "metadata WAS found but an error occurred loading it" vs "no metadata was found".
1114 // The first (metadata found, error occurred loading it) should trigger a user-facing warning, whereas the second (no metadata found) isn't reflective of an error at all.
1115
1129 virtual QString loadNamedMetadata( const QString &uri, bool &resultFlag SIP_OUT );
1130
1131 // TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "metadata WAS found but an error occurred loading it" vs "no metadata was found".
1132 // The first (metadata found, error occurred loading it) should trigger a user-facing warning, whereas the second (no metadata found) isn't reflective of an error at all.
1133
1142 virtual QString loadDefaultMetadata( bool &resultFlag );
1143
1151 bool loadNamedMetadataFromDatabase( const QString &db, const QString &uri, QString &qmd );
1152
1159 bool importNamedMetadata( QDomDocument &document, QString &errorMessage );
1160
1169 virtual QString styleURI() const;
1170
1171 // TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "a style WAS found but an error occurred loading it" vs "no style was found".
1172 // The first (style found, error occurred loading it) should trigger a user-facing warning, whereas the second (no style found) isn't reflective of an error at all.
1173
1183 virtual QString loadDefaultStyle( bool &resultFlag SIP_OUT );
1184
1185 // TODO QGIS 4.0 -- fix this. We incorrectly have a single boolean flag which in which false is used inconsistently for "a style WAS found but an error occurred loading it" vs "no style was found".
1186 // The first (style found, error occurred loading it) should trigger a user-facing warning, whereas the second (no style found) isn't reflective of an error at all.
1187
1204 virtual QString loadNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories, Qgis::LoadStyleFlags flags = Qgis::LoadStyleFlags() );
1205
1213 virtual bool loadNamedStyleFromDatabase( const QString &db, const QString &uri, QString &qml SIP_OUT );
1214
1223 virtual bool importNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT,
1225
1234 virtual void exportNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT, const QgsReadWriteContext &context = QgsReadWriteContext(),
1236
1237
1245 virtual void exportSldStyle( QDomDocument &doc, QString &errorMsg ) const;
1246
1255 virtual void exportSldStyleV2( QDomDocument &doc, QString &errorMsg, const QgsSldExportContext &exportContext ) const;
1256
1268 virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT, StyleCategories categories );
1269
1281 Q_DECL_DEPRECATED virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT ) SIP_DEPRECATED;
1282
1298 virtual QString saveNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, StyleCategories categories = AllStyleCategories );
1299
1309 virtual QString saveSldStyle( const QString &uri, bool &resultFlag ) const;
1310
1321 virtual QString saveSldStyleV2( bool &resultFlag SIP_OUT, const QgsSldExportContext &exportContext ) const;
1322
1331 virtual QString loadSldStyle( const QString &uri, bool &resultFlag );
1332
1333 virtual bool readSld( const QDomNode &node, QString &errorMessage )
1334 { Q_UNUSED( node ) errorMessage = QStringLiteral( "Layer type %1 not supported" ).arg( static_cast<int>( type() ) ); return false; }
1335
1336
1337
1346 virtual bool readSymbology( const QDomNode &node, QString &errorMessage,
1347 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) = 0;
1348
1358 virtual bool readStyle( const QDomNode &node, QString &errorMessage,
1359 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories );
1360
1371 virtual bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1372 StyleCategories categories = AllStyleCategories ) const = 0;
1373
1385 virtual bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1386 StyleCategories categories = AllStyleCategories ) const;
1387
1388
1418 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag = false );
1419
1449 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false );
1450
1480 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags );
1481
1485 QString providerType() const;
1486
1488 QUndoStack *undoStack();
1489
1493 QUndoStack *undoStackStyles();
1494
1498 void setLegendUrl( const QString &legendUrl ) { mLegendUrl = legendUrl; }
1499
1503 QString legendUrl() const { return mLegendUrl; }
1504
1508 void setLegendUrlFormat( const QString &legendUrlFormat ) { mLegendUrlFormat = legendUrlFormat; }
1509
1513 QString legendUrlFormat() const { return mLegendUrlFormat; }
1514
1519 void setLegend( QgsMapLayerLegend *legend SIP_TRANSFER );
1520
1524 QgsMapLayerLegend *legend() const;
1525
1529 QgsMapLayerStyleManager *styleManager() const;
1530
1534 void setRenderer3D( QgsAbstract3DRenderer *renderer SIP_TRANSFER );
1535
1539 QgsAbstract3DRenderer *renderer3D() const;
1540
1549 bool isInScaleRange( double scale ) const;
1550
1561 double minimumScale() const;
1562
1573 double maximumScale() const;
1574
1583 bool hasScaleBasedVisibility() const;
1584
1591 Q_DECL_DEPRECATED bool hasAutoRefreshEnabled() const SIP_DEPRECATED;
1592
1599 Qgis::AutoRefreshMode autoRefreshMode() const;
1600
1607 int autoRefreshInterval() const;
1608
1619 void setAutoRefreshInterval( int interval );
1620
1627 Q_DECL_DEPRECATED void setAutoRefreshEnabled( bool enabled ) SIP_DEPRECATED;
1628
1635 void setAutoRefreshMode( Qgis::AutoRefreshMode mode );
1636
1642 virtual const QgsLayerMetadata &metadata() const;
1643
1649 virtual void setMetadata( const QgsLayerMetadata &metadata );
1650
1654 virtual QString htmlMetadata() const;
1655
1657 virtual QDateTime timestamp() const;
1658
1665 virtual QSet<QgsMapLayerDependency> dependencies() const;
1666
1671 QString refreshOnNotifyMessage() const { return mRefreshOnNofifyMessage; }
1672
1677 bool isRefreshOnNotifyEnabled() const { return mIsRefreshOnNofifyEnabled; }
1678
1687 QString originalXmlProperties() const;
1688
1696 void setOriginalXmlProperties( const QString &originalXmlProperties );
1697
1702 static QString generateId( const QString &layerName );
1703
1713 virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
1714
1721
1728
1735
1741 QString legendPlaceholderImage() const { return mLegendPlaceholderImage;}
1742
1748 void setLegendPlaceholderImage( const QString &imgPath ) { mLegendPlaceholderImage = imgPath; }
1749
1756 virtual bool hasMapTips() const;
1757
1765 QString mapTipTemplate() const;
1766
1774 void setMapTipTemplate( const QString &mapTipTemplate );
1775
1782 void setMapTipsEnabled( bool enabled );
1783
1788 bool mapTipsEnabled() const;
1789
1797 static Qgis::DataProviderReadFlags providerReadFlags( const QDomNode &layerNode, QgsMapLayer::ReadFlags layerReadFlags );
1798
1799 public slots:
1800
1810 void setMinimumScale( double scale );
1811
1821 void setMaximumScale( double scale );
1822
1830 void setScaleBasedVisibility( bool enabled );
1831
1840 void triggerRepaint( bool deferredUpdate = false );
1841
1848 void trigger3DUpdate();
1849
1853 void emitStyleChanged();
1854
1862 virtual bool setDependencies( const QSet<QgsMapLayerDependency> &layers );
1863
1868 void setRefreshOnNotifyEnabled( bool enabled );
1869
1876 void setRefreshOnNofifyMessage( const QString &message ) { mRefreshOnNofifyMessage = message; }
1877
1883 virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) = 0;
1884
1885#ifdef SIP_RUN
1886 SIP_PYOBJECT __repr__();
1887 % MethodCode
1888 QString str = QStringLiteral( "<QgsMapLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
1889 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
1890 % End
1891#endif
1892
1899 QgsProject *project() const;
1900
1901 signals:
1902
1910
1912 void statusChanged( const QString &status );
1913
1922 void idChanged( const QString &id );
1923
1928
1938
1949
1966
1973 void repaintRequested( bool deferredUpdate = false );
1974
1977
1980
1982 void blendModeChanged( QPainter::CompositionMode blendMode );
1983
1992 void opacityChanged( double opacity );
1993
1999
2011
2016
2021
2028
2034
2039
2046
2051 void autoRefreshIntervalChanged( int interval );
2052
2059
2067
2076
2083
2090
2096 void customPropertyChanged( const QString &key );
2097
2103
2109
2115
2122
2130
2131 private slots:
2132
2133 void onNotified( const QString &message );
2134
2150 virtual void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags );
2151
2152 protected:
2153
2158 void clone( QgsMapLayer *layer ) const;
2159
2161 virtual void setExtent( const QgsRectangle &rect );
2162
2167 virtual void setExtent3D( const QgsBox3D &box );
2168
2170 void setValid( bool valid );
2171
2176 virtual bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context );
2177
2182 virtual bool writeXml( QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context ) const;
2183
2195 virtual QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const;
2196
2209 virtual QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const;
2210
2216 void readCustomProperties( const QDomNode &layerNode, const QString &keyStartsWith = QString() );
2217
2219 void writeCustomProperties( QDomNode &layerNode, QDomDocument &doc ) const;
2220
2222 void readStyleManager( const QDomNode &layerNode );
2224 void writeStyleManager( QDomNode &layerNode, QDomDocument &doc ) const;
2225
2229 void writeCommonStyle( QDomElement &layerElement, QDomDocument &document,
2230 const QgsReadWriteContext &context,
2231 StyleCategories categories = AllStyleCategories ) const;
2232
2236 void readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context,
2237 StyleCategories categories = AllStyleCategories );
2238
2240 void setProviderType( const QString &providerType );
2241
2242#ifndef SIP_RUN
2243#if 0
2245 void connectNotify( const char *signal ) override;
2246#endif
2247#endif
2248
2250 void appendError( const QgsErrorMessage &error ) { mError.append( error );}
2252 void setError( const QgsError &error ) { mError = error;}
2253
2260 void invalidateWgs84Extent();
2261
2263 bool mValid = false;
2264
2267
2269 QString mLayerName;
2270
2272 QString mLegendUrl;
2274
2277
2279 QSet<QgsMapLayerDependency> mDependencies;
2280
2286 Q_DECL_DEPRECATED bool hasDependencyCycle( const QSet<QgsMapLayerDependency> & ) const {return false;}
2287
2288 bool mIsRefreshOnNofifyEnabled = false;
2290
2293
2294 //TODO QGIS 4 - move to readXml as a new argument (breaks API)
2295
2298
2304 bool mShouldValidateCrs = true;
2305
2311 double mLayerOpacity = 1.0;
2312
2318 int mBlockStyleChangedSignal = 0;
2319
2320#ifndef SIP_RUN
2321
2330 QString crsHtmlMetadata() const;
2331#endif
2332
2333#ifndef SIP_RUN
2334
2343 QString generalHtmlMetadata() const;
2344#endif
2345
2346#ifndef SIP_RUN
2347
2355 std::unique_ptr<QgsDataProvider> mPreloadedProvider;
2356#endif
2357
2358 private:
2359
2360 virtual QString baseURI( PropertyType type ) const;
2361 QString saveNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2362 bool &resultFlag, StyleCategories categories = AllStyleCategories );
2363 QString loadNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2364 bool &namedPropertyExists, bool &propertySuccessfullyLoaded, StyleCategories categories = AllStyleCategories, Qgis::LoadStyleFlags flags = Qgis::LoadStyleFlags() );
2365 bool loadNamedPropertyFromDatabase( const QString &db, const QString &uri, QString &xml, QgsMapLayer::PropertyType type );
2366
2367 // const method because extents are mutable
2368 void updateExtent( const QgsRectangle &extent ) const;
2369 void updateExtent( const QgsBox3D &extent ) const;
2370
2371 bool rebuildCrs3D( QString *error = nullptr );
2372
2377 virtual bool isReadOnly() const;
2378
2384 QgsCoordinateReferenceSystem mVerticalCrs;
2386
2388 QString mID;
2389
2391 Qgis::LayerType mLayerType;
2392
2393 LayerFlags mFlags = LayerFlags( Identifiable | Removable | Searchable );
2394
2396 QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver;
2397
2399 QString mTag;
2400
2401 //set some generous defaults for scale based visibility
2402
2404 double mMinScale = 0;
2406 double mMaxScale = 100000000;
2408 bool mScaleBasedVisibility = false;
2409
2413 std::unique_ptr< QgsMapLayerServerProperties > mServerProperties;
2414
2416 QUndoStack *mUndoStack = nullptr;
2417
2418 QUndoStack *mUndoStackStyles = nullptr;
2419
2421 QgsObjectCustomProperties mCustomProperties;
2422
2424 QgsMapLayerLegend *mLegend = nullptr;
2425
2427 QgsMapLayerStyleManager *mStyleManager = nullptr;
2428
2430
2432 QTimer *mRefreshTimer = nullptr;
2433
2434 QgsLayerMetadata mMetadata;
2435
2437 QgsAbstract3DRenderer *m3DRenderer = nullptr;
2438
2440 mutable QgsBox3D mExtent3D;
2441
2443 mutable QgsRectangle mExtent2D;
2444
2446 mutable QgsRectangle mWgs84Extent;
2447
2453 QString mOriginalXmlProperties;
2454
2456 bool mRepaintRequestedFired = false;
2457
2459 QString mLegendPlaceholderImage;
2460
2462 QString mMapTipTemplate;
2463
2465 bool mMapTipsEnabled = true;
2466
2467 friend class QgsVectorLayer;
2468 friend class TestQgsProject;
2469 friend class TestQgsMapLayer;
2470};
2471
2476
2477
2478#ifndef SIP_RUN
2479
2484typedef QPointer< QgsMapLayer > QgsWeakMapLayerPointer;
2485
2490typedef QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList;
2491#endif
2492
2493#endif
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
QFlags< DataProviderReadFlag > DataProviderReadFlags
Flags which control data provider construction.
Definition qgis.h:376
LayerType
Types of layers that can be added to a map.
Definition qgis.h:114
@ Group
Composite group layer. Added in QGIS 3.24.
@ Plugin
Plugin based layer.
@ TiledScene
Tiled scene layer. Added in QGIS 3.34.
@ Annotation
Contains freeform, georeferenced annotations. Added in QGIS 3.16.
@ Vector
Vector layer.
@ VectorTile
Vector tile layer. Added in QGIS 3.14.
@ Mesh
Mesh layer. Added in QGIS 3.2.
@ Raster
Raster layer.
@ PointCloud
Point cloud layer. Added in QGIS 3.18.
QFlags< LoadStyleFlag > LoadStyleFlags
Flags for loading layer styles.
Definition qgis.h:170
AutoRefreshMode
Map layer automatic refresh modes.
Definition qgis.h:2011
@ Disabled
Automatic refreshing is disabled.
Base class for all renderers that may to participate in 3D view.
A 3-dimensional box composed of x, y, z coordinates.
Definition qgsbox3d.h:43
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Abstract base class for spatial data provider implementations.
QgsErrorMessage represents single error message.
Definition qgserror.h:33
QgsError is container for error messages (report).
Definition qgserror.h:80
A structured metadata store for a map layer.
This class models dependencies with or between map layers.
Base class for storage of map layer elevation properties.
The QgsMapLayerLegend class is abstract interface for implementations of legends for one map layer.
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for storage of map layer selection properties.
Manages QGIS Server properties for a map layer.
Management of styles for use with one map layer.
Base class for storage of map layer temporal properties.
Base class for all map layer types.
Definition qgsmaplayer.h:75
void crs3DChanged()
Emitted when the crs3D() of the layer has changed.
virtual bool writeSymbology(QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories) const =0
Write the style for the layer into the document provided.
QString legendUrlFormat() const
Returns the format for a URL based layer legend.
void dependenciesChanged()
Emitted when dependencies are changed.
void setError(const QgsError &error)
Sets error message.
void legendChanged()
Signal emitted when legend of the layer has changed.
QFlags< ReadFlag > ReadFlags
QFlags< LayerFlag > LayerFlags
void editingStopped()
Emitted when edited changes have been successfully written to the data provider.
void recalculateExtents() const
This is used to send a request that any mapcanvas using this layer update its extents.
void metadataChanged()
Emitted when the layer's metadata is changed.
void setLegendUrl(const QString &legendUrl)
Sets the URL for the layer's legend.
void request3DUpdate()
Signal emitted when a layer requires an update in any 3D maps.
QgsError mError
Error.
void configChanged()
Emitted whenever the configuration is changed.
void autoRefreshIntervalChanged(int interval)
Emitted when the auto refresh interval changes.
T customFlagProperty(const QString &key, const T &defaultValue)
Returns the property value for a property based on a flag.
Q_DECL_DEPRECATED bool hasDependencyCycle(const QSet< QgsMapLayerDependency > &) const
Checks whether a new set of dependencies will introduce a cycle this method is now deprecated and alw...
void editingStarted()
Emitted when editing on this layer has started.
void isValidChanged()
Emitted when the validity of this layer changed.
QString legendPlaceholderImage() const
Returns path to the placeholder image or an empty string if a generated legend is shown.
QString mRefreshOnNofifyMessage
QString mLegendUrl
WMS legend.
QString mLayerName
Name of the layer - used for display.
void setCustomFlagProperty(const QString &key, const T &value)
Set the value of a property based on a flag.
void mapTipTemplateChanged()
Emitted when the map tip template changes.
void renderer3DChanged()
Signal emitted when 3D renderer associated with the layer has changed.
virtual QgsMapLayerSelectionProperties * selectionProperties()
Returns the layer's selection properties.
void statusChanged(const QString &status)
Emit a signal with status (e.g. to be caught by QgisApp and display a msg on status bar)
bool isRefreshOnNotifyEnabled() const
Returns true if the refresh on provider nofification is enabled.
QSet< QgsMapLayerDependency > mDependencies
List of layers that may modify this layer on modification.
QString mLegendUrlFormat
QFlags< StyleCategory > StyleCategories
const QgsMapLayerServerProperties * serverProperties() const
Returns QGIS Server Properties const for the map layer.
QString mProviderKey
Data provider key (name of the data provider)
void styleChanged()
Signal emitted whenever a change affects the layer's style.
std::unique_ptr< QgsDataProvider > mPreloadedProvider
Optionally used when loading a project, it is released when the layer is effectively created.
void rendererChanged()
Signal emitted when renderer is changed.
void crsChanged()
Emitted when the crs() of the layer has changed.
void dataSourceChanged()
Emitted whenever the layer's data source has been changed.
void idChanged(const QString &id)
Emitted when the layer's ID has been changed.
void setRefreshOnNofifyMessage(const QString &message)
Set the notification message that triggers repaint If refresh on notification is enabled,...
void opacityChanged(double opacity)
Emitted when the layer's opacity is changed, where opacity is a value between 0 (transparent) and 1 (...
void styleLoaded(QgsMapLayer::StyleCategories categories)
Emitted when a style has been loaded.
virtual QgsMapLayerTemporalProperties * temporalProperties()
Returns the layer's temporal properties.
void dataChanged()
Data of layer changed.
virtual QgsMapLayerRenderer * createMapRenderer(QgsRenderContext &rendererContext)=0
Returns new instance of QgsMapLayerRenderer that will be used for rendering of given context.
void willBeDeleted()
Emitted in the destructor when the layer is about to be deleted, but it is still in a perfectly valid...
void verticalCrsChanged()
Emitted when the verticalCrs() of the layer has changed.
void blendModeChanged(QPainter::CompositionMode blendMode)
Signal emitted when the blend mode is changed, through QgsMapLayer::setBlendMode()
virtual bool readSymbology(const QDomNode &node, QString &errorMessage, QgsReadWriteContext &context, StyleCategories categories=AllStyleCategories)=0
Read the symbology for the current layer from the DOM node supplied.
LayerFlag
Flags for the map layer.
void setLegendPlaceholderImage(const QString &imgPath)
Set placeholder image for legend.
void appendError(const QgsErrorMessage &error)
Add error message.
QString mDataSource
Data source description string, varies by layer type.
virtual bool readSld(const QDomNode &node, QString &errorMessage)
ReadFlag
Flags which control project read behavior.
void customPropertyChanged(const QString &key)
Emitted when a custom property of the layer has been changed or removed.
QString legendUrl() const
Returns the URL for the layer's legend.
void flagsChanged()
Emitted when layer's flags have been modified.
void repaintRequested(bool deferredUpdate=false)
By emitting this signal the layer tells that either appearance or content have been changed and any v...
void setLegendUrlFormat(const QString &legendUrlFormat)
Sets the format for a URL based layer legend.
void beforeResolveReferences(QgsProject *project)
Emitted when all layers are loaded and references can be resolved, just before the references of this...
virtual QgsMapLayerElevationProperties * elevationProperties()
Returns the layer's elevation properties.
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)=0
Sets the coordinate transform context to transformContext.
void nameChanged()
Emitted when the name has been changed.
T customEnumProperty(const QString &key, const T &defaultValue)
Returns the property value for a property based on an enum.
StyleCategory
Categories of style to distinguish appropriate sections for import/export.
void layerModified()
Emitted when modifications has been done on layer.
virtual Q_INVOKABLE void reload()
Synchronises with changes in the datasource.
void mapTipsEnabledChanged()
Emitted when map tips are enabled or disabled for the layer.
void setCustomEnumProperty(const QString &key, const T &value)
Set the value of a property based on an enum.
PropertyType
Maplayer has a style and a metadata property.
Simple key-value store (keys = strings, values = variants) that supports loading/saving to/from XML i...
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition qgsproject.h:107
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
The QgsSldExportContext class holds SLD export options and other information related to SLD export of...
An interface for classes which can visit style entity (e.g.
Represents a vector layer which manages a vector based data sets.
#define str(x)
Definition qgis.cpp:38
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:191
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:278
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_OUT
Definition qgis_sip.h:58
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_END
Definition qgis_sip.h:208
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
#define QgsDebugError(str)
Definition qgslogger.h:38
QPointer< QgsMapLayer > QgsWeakMapLayerPointer
Weak pointer for QgsMapLayer.
QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList
A list of weak pointers to QgsMapLayers.
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsTextRendererUtils::CurvedTextFlags)
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.