QGIS API Documentation 3.39.0-Master (d85f3c2a281)
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;
57
58class QDomDocument;
59class QKeyEvent;
60class QPainter;
62class QgsBox3D;
63
64/*
65 * Constants used to describe copy-paste MIME types
66 */
67#define QGSCLIPBOARD_MAPLAYER_MIME "application/qgis.maplayer"
68
69
75class CORE_EXPORT QgsMapLayer : public QObject
76{
77 Q_OBJECT
78
79 Q_PROPERTY( QString id READ id WRITE setId NOTIFY idChanged )
80 Q_PROPERTY( QString name READ name WRITE setName NOTIFY nameChanged )
81 Q_PROPERTY( int autoRefreshInterval READ autoRefreshInterval WRITE setAutoRefreshInterval NOTIFY autoRefreshIntervalChanged )
82 Q_PROPERTY( QgsLayerMetadata metadata READ metadata WRITE setMetadata NOTIFY metadataChanged )
83 Q_PROPERTY( QgsCoordinateReferenceSystem crs READ crs WRITE setCrs NOTIFY crsChanged )
84 Q_PROPERTY( QgsCoordinateReferenceSystem verticalCrs READ verticalCrs WRITE setVerticalCrs NOTIFY verticalCrsChanged )
85 Q_PROPERTY( QgsCoordinateReferenceSystem crs3D READ crs3D NOTIFY crs3DChanged )
86 Q_PROPERTY( Qgis::LayerType type READ type CONSTANT )
87 Q_PROPERTY( bool isValid READ isValid NOTIFY isValidChanged )
88 Q_PROPERTY( double opacity READ opacity WRITE setOpacity NOTIFY opacityChanged )
89 Q_PROPERTY( QString mapTipTemplate READ mapTipTemplate WRITE setMapTipTemplate NOTIFY mapTipTemplateChanged )
90 Q_PROPERTY( bool mapTipsEnabled READ mapTipsEnabled WRITE setMapTipsEnabled NOTIFY mapTipsEnabledChanged )
91
92#ifdef SIP_RUN
94 QgsMapLayer *layer = qobject_cast<QgsMapLayer *>( sipCpp );
95
96 sipType = 0;
97
98 if ( layer )
99 {
100 switch ( layer->type() )
101 {
103 sipType = sipType_QgsVectorLayer;
104 break;
106 sipType = sipType_QgsRasterLayer;
107 break;
109 sipType = sipType_QgsPluginLayer;
110 break;
112 sipType = sipType_QgsMeshLayer;
113 break;
115 sipType = sipType_QgsVectorTileLayer;
116 break;
118 sipType = sipType_QgsAnnotationLayer;
119 break;
121 sipType = sipType_QgsPointCloudLayer;
122 break;
124 sipType = sipType_QgsGroupLayer;
125 break;
127 sipType = sipType_QgsTiledSceneLayer;
128 break;
129 default:
130 sipType = nullptr;
131 break;
132 }
133 }
134 SIP_END
135#endif
136
137 public:
138
143 {
144 Style = 0,
146 };
147
154 {
155 Identifiable = 1 << 0,
156 Removable = 1 << 1,
157 Searchable = 1 << 2,
158 Private = 1 << 3,
159 };
160 Q_ENUM( LayerFlag )
161 Q_DECLARE_FLAGS( LayerFlags, LayerFlag )
162 Q_FLAG( LayerFlags )
163
169 {
170 LayerConfiguration = 1 << 0,
171 Symbology = 1 << 1,
172 Symbology3D = 1 << 2,
173 Labeling = 1 << 3,
174 Fields = 1 << 4,
175 Forms = 1 << 5,
176 Actions = 1 << 6,
177 MapTips = 1 << 7,
178 Diagrams = 1 << 8,
179 AttributeTable = 1 << 9,
180 Rendering = 1 << 10,
181 CustomProperties = 1 << 11,
182 GeometryOptions = 1 << 12,
183 Relations = 1 << 13,
184 Temporal = 1 << 14,
185 Legend = 1 << 15,
186 Elevation = 1 << 16,
187 Notes = 1 << 17,
188 AllStyleCategories = LayerConfiguration | Symbology | Symbology3D | Labeling | Fields | Forms | Actions |
189 MapTips | Diagrams | AttributeTable | Rendering | CustomProperties | GeometryOptions | Relations | Temporal | Legend | Elevation | Notes,
190 };
191 Q_ENUM( StyleCategory )
192 Q_DECLARE_FLAGS( StyleCategories, StyleCategory )
193 Q_FLAG( StyleCategories )
194
201 QgsMapLayer( Qgis::LayerType type = Qgis::LayerType::Vector, const QString &name = QString(), const QString &source = QString() );
202
203 ~QgsMapLayer() override;
204
205 QgsMapLayer( const QgsMapLayer & ) = delete;
206 QgsMapLayer &operator=( const QgsMapLayer & ) = delete;
207
213 virtual QgsMapLayer *clone() const = 0;
214
218 Qgis::LayerType type() const;
219
230 QgsMapLayer::LayerFlags flags() const;
231
242 void setFlags( QgsMapLayer::LayerFlags flags );
243
253 virtual Qgis::MapLayerProperties properties() const;
254
259 static QString extensionPropertyType( PropertyType type );
260
267 QString id() const;
268
284 bool setId( const QString &id );
285
290 void setName( const QString &name );
291
296 QString name() const;
297
301 Q_INVOKABLE virtual QgsDataProvider *dataProvider();
302
307 virtual const QgsDataProvider *dataProvider() const SIP_SKIP;
308
313 QgsProviderMetadata *providerMetadata() const;
314
320 Q_DECL_DEPRECATED void setShortName( const QString &shortName ) SIP_DEPRECATED;
321
327 Q_DECL_DEPRECATED QString shortName() const SIP_DEPRECATED;
328
334 Q_DECL_DEPRECATED void setTitle( const QString &title ) SIP_DEPRECATED;
335
341 Q_DECL_DEPRECATED QString title() const SIP_DEPRECATED;
342
348 Q_DECL_DEPRECATED void setAbstract( const QString &abstract ) SIP_DEPRECATED;
349
355 Q_DECL_DEPRECATED QString abstract() const SIP_DEPRECATED;
356
362 Q_DECL_DEPRECATED void setKeywordList( const QString &keywords ) SIP_DEPRECATED;
363
369 Q_DECL_DEPRECATED QString keywordList() const SIP_DEPRECATED;
370
376 Q_DECL_DEPRECATED void setDataUrl( const QString &dataUrl ) SIP_DEPRECATED;
377
383 Q_DECL_DEPRECATED QString dataUrl() const SIP_DEPRECATED;
384
390 Q_DECL_DEPRECATED void setDataUrlFormat( const QString &dataUrlFormat ) SIP_DEPRECATED;
391
397 Q_DECL_DEPRECATED QString dataUrlFormat() const SIP_DEPRECATED;
398
404 Q_DECL_DEPRECATED void setAttribution( const QString &attrib ) SIP_DEPRECATED;
405
411 Q_DECL_DEPRECATED QString attribution() const SIP_DEPRECATED;
412
418 Q_DECL_DEPRECATED void setAttributionUrl( const QString &attribUrl ) SIP_DEPRECATED;
419
425 Q_DECL_DEPRECATED QString attributionUrl() const SIP_DEPRECATED;
426
427 /* Layer metadataUrl information */
428
433 QgsMapLayerServerProperties *serverProperties() { return mServerProperties.get(); };
434
439 const QgsMapLayerServerProperties *serverProperties() const { return mServerProperties.get(); } SIP_SKIP;
440
449 Q_DECL_DEPRECATED void setMetadataUrl( const QString &metaUrl ) SIP_DEPRECATED;
450
460 Q_DECL_DEPRECATED QString metadataUrl() const SIP_DEPRECATED;
461
470 Q_DECL_DEPRECATED void setMetadataUrlType( const QString &metaUrlType ) SIP_DEPRECATED;
471
481 Q_DECL_DEPRECATED QString metadataUrlType() const SIP_DEPRECATED;
482
491 Q_DECL_DEPRECATED void setMetadataUrlFormat( const QString &metaUrlFormat ) SIP_DEPRECATED;
492
502 Q_DECL_DEPRECATED QString metadataUrlFormat() const SIP_DEPRECATED;
503
509 void setBlendMode( QPainter::CompositionMode blendMode );
510
515 QPainter::CompositionMode blendMode() const;
516
525 virtual void setOpacity( double opacity );
526
535 virtual double opacity() const;
536
538 bool readOnly() const { return isReadOnly(); }
539
543 Q_INVOKABLE virtual void reload() {}
544
549
551 virtual QgsRectangle extent() const;
552
557 virtual QgsBox3D extent3D() const;
558
567 QgsRectangle wgs84Extent( bool forceRecalculate = false ) const;
568
574 bool isValid() const;
575
583 QString publicSource( bool hidePassword = false ) const;
584
590 QString source() const;
591
596 virtual QStringList subLayers() const;
597
602 virtual void setLayerOrder( const QStringList &layers );
603
609 virtual void setSubLayerVisibility( const QString &name, bool visible );
610
617 virtual bool supportsEditing() const;
618
620 virtual bool isEditable() const;
621
627 virtual bool isModified() const;
628
632 virtual bool isSpatial() const;
633
643 virtual bool isTemporary() const;
644
650 {
651 FlagDontResolveLayers = 1 << 0,
652 FlagTrustLayerMetadata = 1 << 1,
653 FlagReadExtentFromXml = 1 << 2,
654 FlagForceReadOnly = 1 << 3,
655 };
656 Q_DECLARE_FLAGS( ReadFlags, ReadFlag )
657
658
675 bool readLayerXml( const QDomElement &layerElement, QgsReadWriteContext &context,
676 QgsMapLayer::ReadFlags flags = QgsMapLayer::ReadFlags(), QgsDataProvider *preloadedProvider SIP_TRANSFER = nullptr );
677
693 bool writeLayerXml( QDomElement &layerElement, QDomDocument &document, const QgsReadWriteContext &context ) const;
694
698 virtual void resolveReferences( QgsProject *project );
699
704 Q_INVOKABLE QStringList customPropertyKeys() const;
705
711 Q_INVOKABLE void setCustomProperty( const QString &key, const QVariant &value );
712
717 Q_INVOKABLE QVariant customProperty( const QString &value, const QVariant &defaultValue = QVariant() ) const;
718
722 void setCustomProperties( const QgsObjectCustomProperties &properties );
723
729 const QgsObjectCustomProperties &customProperties() const;
730
740 virtual int listStylesInDatabase( QStringList &ids SIP_OUT, QStringList &names SIP_OUT,
741 QStringList &descriptions SIP_OUT, QString &msgError SIP_OUT );
742
746 virtual QString getStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
747
754 virtual bool deleteStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
755
772 virtual void saveStyleToDatabase( const QString &name, const QString &description,
773 bool useAsDefault, const QString &uiFileContent,
774 QString &msgError SIP_OUT,
776
777
778 // 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".
779 // 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.
780
791 virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag SIP_OUT, bool loadFromLocalDb,
794
795#ifndef SIP_RUN
796
807 template <class T>
808 T customEnumProperty( const QString &key, const T &defaultValue )
809 {
810 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
811 Q_ASSERT( metaEnum.isValid() );
812 if ( !metaEnum.isValid() )
813 {
814 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
815 }
816
817 T v;
818 bool ok = false;
819
820 if ( metaEnum.isValid() )
821 {
822 // read as string
823 QByteArray ba = customProperty( key, metaEnum.valueToKey( static_cast<int>( defaultValue ) ) ).toString().toUtf8();
824 const char *vs = ba.data();
825 v = static_cast<T>( metaEnum.keyToValue( vs, &ok ) );
826 if ( ok )
827 return v;
828 }
829
830 // if failed, try to read as int (old behavior)
831 // this code shall be removed later
832 // then the method could be marked as const
833 v = static_cast<T>( customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok ) );
834 if ( metaEnum.isValid() )
835 {
836 if ( !ok || !metaEnum.valueToKey( static_cast<int>( v ) ) )
837 {
838 v = defaultValue;
839 }
840 else
841 {
842 // found property as an integer
843 // convert the property to the new form (string)
844 setCustomEnumProperty( key, v );
845 }
846 }
847
848 return v;
849 }
850
859 template <class T>
860 void setCustomEnumProperty( const QString &key, const T &value )
861 {
862 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
863 Q_ASSERT( metaEnum.isValid() );
864 if ( metaEnum.isValid() )
865 {
866 setCustomProperty( key, metaEnum.valueToKey( static_cast<int>( value ) ) );
867 }
868 else
869 {
870 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
871 }
872 }
873
885 template <class T>
886 T customFlagProperty( const QString &key, const T &defaultValue )
887 {
888 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
889 Q_ASSERT( metaEnum.isValid() );
890 if ( !metaEnum.isValid() )
891 {
892 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
893 }
894
895 T v = defaultValue;
896 bool ok = false;
897
898 if ( metaEnum.isValid() )
899 {
900 // read as string
901 QByteArray ba = customProperty( key, metaEnum.valueToKeys( defaultValue ) ).toString().toUtf8();
902 const char *vs = ba.data();
903 v = static_cast<T>( metaEnum.keysToValue( vs, &ok ) );
904 }
905 if ( !ok )
906 {
907 // if failed, try to read as int
908 const int intValue = customProperty( key, static_cast<int>( defaultValue ) ).toInt( &ok );
909 if ( metaEnum.isValid() )
910 {
911 if ( ok )
912 {
913 // check that the int value does correspond to a flag
914 // see https://stackoverflow.com/a/68495949/1548052
915 const QByteArray keys = metaEnum.valueToKeys( intValue );
916 const int intValueCheck = metaEnum.keysToValue( keys );
917 if ( intValue != intValueCheck )
918 {
919 v = defaultValue;
920 }
921 else
922 {
923 // found property as an integer
924 v = T( intValue );
925 // convert the property to the new form (string)
926 // this code could be removed
927 // then the method could be marked as const
928 setCustomFlagProperty( key, v );
929 }
930 }
931 else
932 {
933 v = defaultValue;
934 }
935 }
936 }
937
938 return v;
939 }
940
949 template <class T>
950 void setCustomFlagProperty( const QString &key, const T &value )
951 {
952 const QMetaEnum metaEnum = QMetaEnum::fromType<T>();
953 Q_ASSERT( metaEnum.isValid() );
954 if ( metaEnum.isValid() )
955 {
956 setCustomProperty( key, metaEnum.valueToKeys( value ) );
957 }
958 else
959 {
960 QgsDebugError( QStringLiteral( "Invalid metaenum. Enum probably misses Q_ENUM or Q_FLAG declaration." ) );
961 }
962 }
963#endif
964
965
970 void removeCustomProperty( const QString &key );
971
977 virtual QgsError error() const;
978
991
1010 QgsCoordinateReferenceSystem verticalCrs() const;
1011
1030 QgsCoordinateReferenceSystem crs3D() const;
1031
1042 void setCrs( const QgsCoordinateReferenceSystem &srs, bool emitSignal = true );
1043
1063 bool setVerticalCrs( const QgsCoordinateReferenceSystem &crs, QString *errorMessage SIP_OUT = nullptr );
1064
1070 QgsCoordinateTransformContext transformContext( ) const;
1071
1072
1077 static QString formatLayerName( const QString &name );
1078
1085 virtual QString metadataUri() const;
1086
1092 void exportNamedMetadata( QDomDocument &doc, QString &errorMsg ) const;
1093
1102 virtual QString saveDefaultMetadata( bool &resultFlag SIP_OUT );
1103
1117 QString saveNamedMetadata( const QString &uri, bool &resultFlag );
1118
1119 // 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".
1120 // 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.
1121
1135 virtual QString loadNamedMetadata( const QString &uri, bool &resultFlag SIP_OUT );
1136
1137 // 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".
1138 // 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.
1139
1148 virtual QString loadDefaultMetadata( bool &resultFlag );
1149
1157 bool loadNamedMetadataFromDatabase( const QString &db, const QString &uri, QString &qmd );
1158
1165 bool importNamedMetadata( QDomDocument &document, QString &errorMessage );
1166
1175 virtual QString styleURI() const;
1176
1177 // 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".
1178 // 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.
1179
1189 virtual QString loadDefaultStyle( bool &resultFlag SIP_OUT );
1190
1191 // 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".
1192 // 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.
1193
1210 virtual QString loadNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories, Qgis::LoadStyleFlags flags = Qgis::LoadStyleFlags() );
1211
1219 virtual bool loadNamedStyleFromDatabase( const QString &db, const QString &uri, QString &qml SIP_OUT );
1220
1229 virtual bool importNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT,
1231
1240 virtual void exportNamedStyle( QDomDocument &doc, QString &errorMsg SIP_OUT, const QgsReadWriteContext &context = QgsReadWriteContext(),
1242
1243
1251 virtual void exportSldStyle( QDomDocument &doc, QString &errorMsg ) const;
1252
1261 virtual void exportSldStyleV2( QDomDocument &doc, QString &errorMsg, const QgsSldExportContext &exportContext ) const;
1262
1274 virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT, StyleCategories categories );
1275
1287 Q_DECL_DEPRECATED virtual QString saveDefaultStyle( bool &resultFlag SIP_OUT ) SIP_DEPRECATED;
1288
1304 virtual QString saveNamedStyle( const QString &uri, bool &resultFlag SIP_OUT, StyleCategories categories = AllStyleCategories );
1305
1315 virtual QString saveSldStyle( const QString &uri, bool &resultFlag ) const;
1316
1327 virtual QString saveSldStyleV2( bool &resultFlag SIP_OUT, const QgsSldExportContext &exportContext ) const;
1328
1337 virtual QString loadSldStyle( const QString &uri, bool &resultFlag );
1338
1339 virtual bool readSld( const QDomNode &node, QString &errorMessage )
1340 { Q_UNUSED( node ) errorMessage = QStringLiteral( "Layer type %1 not supported" ).arg( static_cast<int>( type() ) ); return false; }
1341
1342
1343
1352 virtual bool readSymbology( const QDomNode &node, QString &errorMessage,
1353 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories ) = 0;
1354
1364 virtual bool readStyle( const QDomNode &node, QString &errorMessage,
1365 QgsReadWriteContext &context, StyleCategories categories = AllStyleCategories );
1366
1377 virtual bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1378 StyleCategories categories = AllStyleCategories ) const = 0;
1379
1391 virtual bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QgsReadWriteContext &context,
1392 StyleCategories categories = AllStyleCategories ) const;
1393
1394
1424 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag = false );
1425
1455 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, bool loadDefaultStyleFlag = false );
1456
1486 void setDataSource( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags );
1487
1491 QString providerType() const;
1492
1494 QUndoStack *undoStack();
1495
1499 QUndoStack *undoStackStyles();
1500
1504 void setLegendUrl( const QString &legendUrl ) { mLegendUrl = legendUrl; }
1505
1509 QString legendUrl() const { return mLegendUrl; }
1510
1514 void setLegendUrlFormat( const QString &legendUrlFormat ) { mLegendUrlFormat = legendUrlFormat; }
1515
1519 QString legendUrlFormat() const { return mLegendUrlFormat; }
1520
1525 void setLegend( QgsMapLayerLegend *legend SIP_TRANSFER );
1526
1530 QgsMapLayerLegend *legend() const;
1531
1535 QgsMapLayerStyleManager *styleManager() const;
1536
1540 void setRenderer3D( QgsAbstract3DRenderer *renderer SIP_TRANSFER );
1541
1545 QgsAbstract3DRenderer *renderer3D() const;
1546
1555 bool isInScaleRange( double scale ) const;
1556
1567 double minimumScale() const;
1568
1579 double maximumScale() const;
1580
1589 bool hasScaleBasedVisibility() const;
1590
1597 Q_DECL_DEPRECATED bool hasAutoRefreshEnabled() const SIP_DEPRECATED;
1598
1605 Qgis::AutoRefreshMode autoRefreshMode() const;
1606
1613 int autoRefreshInterval() const;
1614
1625 void setAutoRefreshInterval( int interval );
1626
1633 Q_DECL_DEPRECATED void setAutoRefreshEnabled( bool enabled ) SIP_DEPRECATED;
1634
1641 void setAutoRefreshMode( Qgis::AutoRefreshMode mode );
1642
1648 virtual const QgsLayerMetadata &metadata() const;
1649
1655 virtual void setMetadata( const QgsLayerMetadata &metadata );
1656
1660 virtual QString htmlMetadata() const;
1661
1663 virtual QDateTime timestamp() const;
1664
1671 virtual QSet<QgsMapLayerDependency> dependencies() const;
1672
1677 QString refreshOnNotifyMessage() const { return mRefreshOnNofifyMessage; }
1678
1683 bool isRefreshOnNotifyEnabled() const { return mIsRefreshOnNofifyEnabled; }
1684
1693 QString originalXmlProperties() const;
1694
1702 void setOriginalXmlProperties( const QString &originalXmlProperties );
1703
1708 static QString generateId( const QString &layerName );
1709
1719 virtual bool accept( QgsStyleEntityVisitorInterface *visitor ) const;
1720
1727
1734
1741
1747 QString legendPlaceholderImage() const { return mLegendPlaceholderImage;}
1748
1754 void setLegendPlaceholderImage( const QString &imgPath ) { mLegendPlaceholderImage = imgPath; }
1755
1762 virtual bool hasMapTips() const;
1763
1771 QString mapTipTemplate() const;
1772
1780 void setMapTipTemplate( const QString &mapTipTemplate );
1781
1788 void setMapTipsEnabled( bool enabled );
1789
1794 bool mapTipsEnabled() const;
1795
1803 static Qgis::DataProviderReadFlags providerReadFlags( const QDomNode &layerNode, QgsMapLayer::ReadFlags layerReadFlags );
1804
1805 public slots:
1806
1816 void setMinimumScale( double scale );
1817
1827 void setMaximumScale( double scale );
1828
1836 void setScaleBasedVisibility( bool enabled );
1837
1846 void triggerRepaint( bool deferredUpdate = false );
1847
1854 void trigger3DUpdate();
1855
1859 void emitStyleChanged();
1860
1868 virtual bool setDependencies( const QSet<QgsMapLayerDependency> &layers );
1869
1874 void setRefreshOnNotifyEnabled( bool enabled );
1875
1882 void setRefreshOnNofifyMessage( const QString &message ) { mRefreshOnNofifyMessage = message; }
1883
1889 virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) = 0;
1890
1891#ifdef SIP_RUN
1892 SIP_PYOBJECT __repr__();
1893 % MethodCode
1894 QString str = QStringLiteral( "<QgsMapLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
1895 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
1896 % End
1897#endif
1898
1905 QgsProject *project() const;
1906
1907 signals:
1908
1916
1918 void statusChanged( const QString &status );
1919
1928 void idChanged( const QString &id );
1929
1934
1944
1955
1972
1979 void repaintRequested( bool deferredUpdate = false );
1980
1983
1986
1988 void blendModeChanged( QPainter::CompositionMode blendMode );
1989
1998 void opacityChanged( double opacity );
1999
2005
2017
2022
2027
2034
2040
2045
2052
2057 void autoRefreshIntervalChanged( int interval );
2058
2065
2073
2082
2089
2096
2102 void customPropertyChanged( const QString &key );
2103
2109
2115
2121
2128
2136
2137 private slots:
2138
2139 void onNotified( const QString &message );
2140
2156 virtual void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, Qgis::DataProviderReadFlags flags );
2157
2158 protected:
2159
2164 void clone( QgsMapLayer *layer ) const;
2165
2167 virtual void setExtent( const QgsRectangle &rect );
2168
2173 virtual void setExtent3D( const QgsBox3D &box );
2174
2176 void setValid( bool valid );
2177
2182 virtual bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context );
2183
2188 virtual bool writeXml( QDomNode &layer_node, QDomDocument &document, const QgsReadWriteContext &context ) const;
2189
2201 virtual QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const;
2202
2215 virtual QString decodedSource( const QString &source, const QString &dataProvider, const QgsReadWriteContext &context ) const;
2216
2222 void readCustomProperties( const QDomNode &layerNode, const QString &keyStartsWith = QString() );
2223
2225 void writeCustomProperties( QDomNode &layerNode, QDomDocument &doc ) const;
2226
2228 void readStyleManager( const QDomNode &layerNode );
2230 void writeStyleManager( QDomNode &layerNode, QDomDocument &doc ) const;
2231
2235 void writeCommonStyle( QDomElement &layerElement, QDomDocument &document,
2236 const QgsReadWriteContext &context,
2237 StyleCategories categories = AllStyleCategories ) const;
2238
2242 void readCommonStyle( const QDomElement &layerElement, const QgsReadWriteContext &context,
2243 StyleCategories categories = AllStyleCategories );
2244
2246 void setProviderType( const QString &providerType );
2247
2248#ifndef SIP_RUN
2249#if 0
2251 void connectNotify( const char *signal ) override;
2252#endif
2253#endif
2254
2256 void appendError( const QgsErrorMessage &error ) { mError.append( error );}
2258 void setError( const QgsError &error ) { mError = error;}
2259
2266 void invalidateWgs84Extent();
2267
2269 bool mValid = false;
2270
2273
2275 QString mLayerName;
2276
2278 QString mLegendUrl;
2280
2283
2285 QSet<QgsMapLayerDependency> mDependencies;
2286
2292 Q_DECL_DEPRECATED bool hasDependencyCycle( const QSet<QgsMapLayerDependency> & ) const {return false;}
2293
2294 bool mIsRefreshOnNofifyEnabled = false;
2296
2299
2300 //TODO QGIS 4 - move to readXml as a new argument (breaks API)
2301
2304
2310 bool mShouldValidateCrs = true;
2311
2317 double mLayerOpacity = 1.0;
2318
2324 int mBlockStyleChangedSignal = 0;
2325
2326#ifndef SIP_RUN
2327
2336 QString crsHtmlMetadata() const;
2337#endif
2338
2339#ifndef SIP_RUN
2340
2349 QString generalHtmlMetadata() const;
2350
2359 QString customPropertyHtmlMetadata() const;
2360#endif
2361
2362#ifndef SIP_RUN
2363
2371 std::unique_ptr<QgsDataProvider> mPreloadedProvider;
2372#endif
2373
2374 private:
2375
2376 virtual QString baseURI( PropertyType type ) const;
2377 QString saveNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2378 bool &resultFlag, StyleCategories categories = AllStyleCategories );
2379 QString loadNamedProperty( const QString &uri, QgsMapLayer::PropertyType type,
2380 bool &namedPropertyExists, bool &propertySuccessfullyLoaded, StyleCategories categories = AllStyleCategories, Qgis::LoadStyleFlags flags = Qgis::LoadStyleFlags() );
2381 bool loadNamedPropertyFromDatabase( const QString &db, const QString &uri, QString &xml, QgsMapLayer::PropertyType type );
2382
2383 // const method because extents are mutable
2384 void updateExtent( const QgsRectangle &extent ) const;
2385 void updateExtent( const QgsBox3D &extent ) const;
2386
2387 bool rebuildCrs3D( QString *error = nullptr );
2388
2393 virtual bool isReadOnly() const;
2394
2400 QgsCoordinateReferenceSystem mVerticalCrs;
2402
2404 QString mID;
2405
2407 Qgis::LayerType mLayerType;
2408
2409 LayerFlags mFlags = LayerFlags( Identifiable | Removable | Searchable );
2410
2412 QPainter::CompositionMode mBlendMode = QPainter::CompositionMode_SourceOver;
2413
2415 QString mTag;
2416
2417 //set some generous defaults for scale based visibility
2418
2420 double mMinScale = 0;
2422 double mMaxScale = 100000000;
2424 bool mScaleBasedVisibility = false;
2425
2429 std::unique_ptr< QgsMapLayerServerProperties > mServerProperties;
2430
2432 QUndoStack *mUndoStack = nullptr;
2433
2434 QUndoStack *mUndoStackStyles = nullptr;
2435
2437 QgsObjectCustomProperties mCustomProperties;
2438
2440 QgsMapLayerLegend *mLegend = nullptr;
2441
2443 QgsMapLayerStyleManager *mStyleManager = nullptr;
2444
2446
2448 QTimer *mRefreshTimer = nullptr;
2449
2450 QgsLayerMetadata mMetadata;
2451
2453 QgsAbstract3DRenderer *m3DRenderer = nullptr;
2454
2456 mutable QgsBox3D mExtent3D;
2457
2459 mutable QgsRectangle mExtent2D;
2460
2462 mutable QgsRectangle mWgs84Extent;
2463
2469 QString mOriginalXmlProperties;
2470
2472 bool mRepaintRequestedFired = false;
2473
2475 QString mLegendPlaceholderImage;
2476
2478 QString mMapTipTemplate;
2479
2481 bool mMapTipsEnabled = true;
2482
2483 friend class QgsVectorLayer;
2484 friend class TestQgsProject;
2485 friend class TestQgsMapLayer;
2486};
2487
2492
2493
2494#ifndef SIP_RUN
2495
2500typedef QPointer< QgsMapLayer > QgsWeakMapLayerPointer;
2501
2506typedef QList< QgsWeakMapLayerPointer > QgsWeakMapLayerPointerList;
2507#endif
2508
2509#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:450
LayerType
Types of layers that can be added to a map.
Definition qgis.h:169
@ 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:225
AutoRefreshMode
Map layer automatic refresh modes.
Definition qgis.h:2128
@ 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
A container for error messages.
Definition qgserror.h:81
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:76
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
Holds data provider key, description, and associated shared library file or function pointer informat...
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.