QGIS API Documentation  3.24.2-Tisler (13c1a02865)
qgsvectorlayer.h
Go to the documentation of this file.
1 
2 /***************************************************************************
3  -------------------
4  begin : Oct 29, 2003
5  copyright : (C) 2003 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 QGSVECTORLAYER_H
19 #define QGSVECTORLAYER_H
20 
21 
22 #include "qgis_core.h"
23 #include <QMap>
24 #include <QSet>
25 #include <QList>
26 #include <QStringList>
27 #include <QFont>
28 #include <QMutex>
29 
30 #include "qgis.h"
31 #include "qgsmaplayer.h"
32 #include "qgsfeature.h"
33 #include "qgsfeaturerequest.h"
34 #include "qgsfeaturesource.h"
35 #include "qgsfields.h"
36 #include "qgsvectordataprovider.h"
38 #include "qgseditformconfig.h"
40 #include "qgsaggregatecalculator.h"
41 #include "qgsfeatureiterator.h"
44 #include "qgsexpressioncontext.h"
45 
46 class QPainter;
47 class QImage;
48 
50 class QgsActionManager;
52 class QgsCurve;
54 class QgsDiagramRenderer;
57 class QgsFeatureRenderer;
58 class QgsGeometry;
59 class QgsGeometryVertexIndex;
60 class QgsMapToPixel;
61 class QgsRectangle;
62 class QgsRectangle;
63 class QgsRelation;
64 class QgsWeakRelation;
65 class QgsRelationManager;
68 class QgsSymbol;
75 class QgsPoint;
76 class QgsFeedback;
78 class QgsAuxiliaryLayer;
79 class QgsGeometryOptions;
83 
84 typedef QList<int> QgsAttributeList;
85 typedef QSet<int> QgsAttributeIds;
86 
87 // TODO QGIS4: Remove virtual from non-inherited methods (like isModified)
88 
392 {
393  Q_OBJECT
394 
395  Q_PROPERTY( QString subsetString READ subsetString WRITE setSubsetString NOTIFY subsetStringChanged )
396  Q_PROPERTY( QString displayExpression READ displayExpression WRITE setDisplayExpression NOTIFY displayExpressionChanged )
397  Q_PROPERTY( QString mapTipTemplate READ mapTipTemplate WRITE setMapTipTemplate NOTIFY mapTipTemplateChanged )
398  Q_PROPERTY( QgsEditFormConfig editFormConfig READ editFormConfig WRITE setEditFormConfig NOTIFY editFormConfigChanged )
399  Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly NOTIFY readOnlyChanged )
400  Q_PROPERTY( bool supportsEditing READ supportsEditing NOTIFY supportsEditingChanged )
401 
402  public:
403 
409  {
410 
414  explicit LayerOptions( bool loadDefaultStyle = true,
415  bool readExtentFromXml = false )
416  : loadDefaultStyle( loadDefaultStyle )
417  , readExtentFromXml( readExtentFromXml )
418  {}
419 
424  explicit LayerOptions( const QgsCoordinateTransformContext &transformContext,
425  bool loadDefaultStyle = true,
426  bool readExtentFromXml = false
427  )
428  : loadDefaultStyle( loadDefaultStyle )
429  , readExtentFromXml( readExtentFromXml )
430  , transformContext( transformContext )
431  {}
432 
434  bool loadDefaultStyle = true;
435 
440  bool readExtentFromXml = false;
441 
447 
460 
473 
487  bool skipCrsValidation = false;
488 
489  };
490 
495  struct CORE_EXPORT DeleteContext
496  {
497 
501  explicit DeleteContext( bool cascade = false, QgsProject *project = nullptr ): cascade( cascade ), project( project ) {}
502 
509  QList<QgsVectorLayer *> handledLayers( bool includeAuxiliaryLayers = true ) const;
510 
514  QgsFeatureIds handledFeatures( QgsVectorLayer *layer ) const;
515 
516  QMap<QgsVectorLayer *, QgsFeatureIds> mHandledFeatures SIP_SKIP;
517  bool cascade;
519  };
520 
534  explicit QgsVectorLayer( const QString &path = QString(), const QString &baseName = QString(),
535  const QString &providerLib = "ogr", const QgsVectorLayer::LayerOptions &options = QgsVectorLayer::LayerOptions() );
536 
537  ~QgsVectorLayer() override;
538 
540  QgsVectorLayer( const QgsVectorLayer &rhs ) = delete;
542  QgsVectorLayer &operator=( QgsVectorLayer const &rhs ) = delete;
543 
544 #ifdef SIP_RUN
545  SIP_PYOBJECT __repr__();
546  % MethodCode
547  QString str = QStringLiteral( "<QgsVectorLayer: '%1' (%2)>" ).arg( sipCpp->name(), sipCpp->dataProvider() ? sipCpp->dataProvider()->name() : QStringLiteral( "Invalid" ) );
548  sipRes = PyUnicode_FromString( str.toUtf8().constData() );
549  % End
550 #endif
551 
560  QgsVectorLayer *clone() const override SIP_FACTORY;
561 
566  QString storageType() const;
567 
571  QString capabilitiesString() const;
572 
573 
583  bool isSqlQuery() const;
584 
591  Qgis::VectorLayerTypeFlags vectorLayerTypeFlags() const;
592 
593 
597  QString dataComment() const;
598 
606  QString displayField() const;
607 
615  void setDisplayExpression( const QString &displayExpression );
616 
623  QString displayExpression() const;
624 
625  QgsVectorDataProvider *dataProvider() FINAL;
626  const QgsVectorDataProvider *dataProvider() const FINAL SIP_SKIP;
627 
631  QgsMapLayerTemporalProperties *temporalProperties() override;
632 
643  void setProviderEncoding( const QString &encoding );
644 
646  void setCoordinateSystem();
647 
653  bool addJoin( const QgsVectorLayerJoinInfo &joinInfo );
654 
659  bool removeJoin( const QString &joinLayerId );
660 
665  QgsVectorLayerJoinBuffer *joinBuffer() { return mJoinBuffer; }
666 
671  const QgsVectorLayerJoinBuffer *joinBuffer() const { return mJoinBuffer; } SIP_SKIP;
672 
673  const QList<QgsVectorLayerJoinInfo> vectorJoins() const;
674 
683  bool setDependencies( const QSet<QgsMapLayerDependency> &layers ) FINAL;
684 
692  QSet<QgsMapLayerDependency> dependencies() const FINAL;
693 
704  int addExpressionField( const QString &exp, const QgsField &fld );
705 
713  void removeExpressionField( int index );
714 
724  QString expressionField( int index ) const;
725 
735  void updateExpressionField( int index, const QString &exp );
736 
743  QgsActionManager *actions() { return mActions; }
744 
750  const QgsActionManager *actions() const SIP_SKIP { return mActions; }
751 
757  int selectedFeatureCount() const;
758 
768  Q_INVOKABLE void selectByRect( QgsRectangle &rect, Qgis::SelectBehavior behavior = Qgis::SelectBehavior::SetSelection );
769 
779  Q_INVOKABLE void selectByExpression( const QString &expression, Qgis::SelectBehavior behavior = Qgis::SelectBehavior::SetSelection );
780 
791  Q_INVOKABLE void selectByIds( const QgsFeatureIds &ids, Qgis::SelectBehavior behavior = Qgis::SelectBehavior::SetSelection );
792 
804  Q_INVOKABLE void modifySelection( const QgsFeatureIds &selectIds, const QgsFeatureIds &deselectIds );
805 
807  Q_INVOKABLE void invertSelection();
808 
810  Q_INVOKABLE void selectAll();
811 
819  Q_INVOKABLE void invertSelectionInRectangle( QgsRectangle &rect );
820 
833  Q_INVOKABLE QgsFeatureList selectedFeatures() const;
834 
850  QgsFeatureIterator getSelectedFeatures( QgsFeatureRequest request = QgsFeatureRequest() ) const;
851 
859  Q_INVOKABLE const QgsFeatureIds &selectedFeatureIds() const;
860 
862  Q_INVOKABLE QgsRectangle boundingBoxOfSelected() const;
863 
871  bool labelsEnabled() const;
872 
882  void setLabelsEnabled( bool enabled );
883 
889  bool diagramsEnabled() const;
890 
892  void setDiagramRenderer( QgsDiagramRenderer *r SIP_TRANSFER );
893  const QgsDiagramRenderer *diagramRenderer() const { return mDiagramRenderer; }
894 
895  void setDiagramLayerSettings( const QgsDiagramLayerSettings &s );
896  const QgsDiagramLayerSettings *diagramLayerSettings() const { return mDiagramLayerSettings; }
897 
904  QgsFeatureRenderer *renderer() { return mRenderer; }
905 
913  const QgsFeatureRenderer *renderer() const SIP_SKIP { return mRenderer; }
914 
921  void setRenderer( QgsFeatureRenderer *r SIP_TRANSFER );
922 
932  void addFeatureRendererGenerator( QgsFeatureRendererGenerator *generator SIP_TRANSFER );
933 
943  void removeFeatureRendererGenerator( const QString &id );
944 
952  QList< const QgsFeatureRendererGenerator * > featureRendererGenerators() const;
953 
955  Q_INVOKABLE QgsWkbTypes::GeometryType geometryType() const;
956 
958  Q_INVOKABLE QgsWkbTypes::Type wkbType() const FINAL;
959 
960  QgsCoordinateReferenceSystem sourceCrs() const FINAL;
961  QString sourceName() const FINAL;
962 
967  bool readXml( const QDomNode &layer_node, QgsReadWriteContext &context ) FINAL;
968 
973  bool writeXml( QDomNode &layer_node, QDomDocument &doc, const QgsReadWriteContext &context ) const FINAL;
974 
975  QString encodedSource( const QString &source, const QgsReadWriteContext &context ) const FINAL;
976  QString decodedSource( const QString &source, const QString &provider, const QgsReadWriteContext &context ) const FINAL;
977 
982  void resolveReferences( QgsProject *project ) FINAL;
983 
999  virtual void saveStyleToDatabase( const QString &name, const QString &description,
1000  bool useAsDefault, const QString &uiFileContent,
1001  QString &msgError SIP_OUT );
1002 
1012  virtual int listStylesInDatabase( QStringList &ids SIP_OUT, QStringList &names SIP_OUT,
1013  QStringList &descriptions SIP_OUT, QString &msgError SIP_OUT );
1014 
1018  virtual QString getStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
1019 
1027  virtual bool deleteStyleFromDatabase( const QString &styleId, QString &msgError SIP_OUT );
1028 
1036  virtual QString loadNamedStyle( const QString &theURI, bool &resultFlag SIP_OUT, bool loadFromLocalDb,
1037  QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories );
1038 
1043  QString loadNamedStyle( const QString &theURI, bool &resultFlag SIP_OUT,
1044  QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) FINAL;
1045 
1059  bool loadAuxiliaryLayer( const QgsAuxiliaryStorage &storage, const QString &key = QString() );
1060 
1070  void setAuxiliaryLayer( QgsAuxiliaryLayer *layer SIP_TRANSFER = nullptr );
1071 
1077  QgsAuxiliaryLayer *auxiliaryLayer();
1078 
1084  const QgsAuxiliaryLayer *auxiliaryLayer() const SIP_SKIP;
1085 
1086  bool readSymbology( const QDomNode &layerNode, QString &errorMessage,
1087  QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) FINAL;
1088  bool readStyle( const QDomNode &node, QString &errorMessage,
1089  QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) FINAL;
1090  bool writeSymbology( QDomNode &node, QDomDocument &doc, QString &errorMessage,
1091  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const FINAL;
1092  bool writeStyle( QDomNode &node, QDomDocument &doc, QString &errorMessage,
1093  const QgsReadWriteContext &context, QgsMapLayer::StyleCategories categories = QgsMapLayer::AllStyleCategories ) const FINAL;
1094 
1103  bool writeSld( QDomNode &node, QDomDocument &doc, QString &errorMessage, const QVariantMap &props = QVariantMap() ) const;
1104 
1105  bool readSld( const QDomNode &node, QString &errorMessage ) FINAL;
1106 
1112  long long featureCount( const QString &legendKey ) const;
1113 
1120  QgsFeatureIds symbolFeatureIds( const QString &legendKey ) const;
1121 
1132  FeatureAvailability hasFeatures() const FINAL;
1133 
1134 
1135  QString loadDefaultStyle( bool &resultFlag SIP_OUT ) FINAL;
1136 
1150  QgsVectorLayerFeatureCounter *countSymbolFeatures( bool storeSymbolFids = false );
1151 
1159  virtual bool setSubsetString( const QString &subset );
1160 
1165  virtual QString subsetString() const;
1166 
1172  QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const FINAL;
1173 
1177  inline QgsFeatureIterator getFeatures( const QString &expression )
1178  {
1179  return getFeatures( QgsFeatureRequest( expression ) );
1180  }
1181 
1186  inline QgsFeature getFeature( QgsFeatureId fid ) const
1187  {
1188  QgsFeature feature;
1189  getFeatures( QgsFeatureRequest( fid ) ).nextFeature( feature );
1190  return feature;
1191  }
1192 
1197  QgsGeometry getGeometry( QgsFeatureId fid ) const;
1198 
1203  {
1204  return getFeatures( QgsFeatureRequest( fids ) );
1205  }
1206 
1210  inline QgsFeatureIterator getFeatures( const QgsRectangle &rectangle )
1211  {
1212  return getFeatures( QgsFeatureRequest( rectangle ) );
1213  }
1214 
1215  bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) FINAL;
1216 
1242  bool updateFeature( QgsFeature &feature, bool skipDefaultValues = false );
1243 
1255  bool insertVertex( double x, double y, QgsFeatureId atFeatureId, int beforeVertex );
1256 
1268  bool insertVertex( const QgsPoint &point, QgsFeatureId atFeatureId, int beforeVertex );
1269 
1280  bool moveVertex( double x, double y, QgsFeatureId atFeatureId, int atVertex );
1281 
1292  bool moveVertex( const QgsPoint &p, QgsFeatureId atFeatureId, int atVertex ) SIP_PYNAME( moveVertexV2 );
1293 
1304  Qgis::VectorEditResult deleteVertex( QgsFeatureId featureId, int vertex );
1305 
1313  Q_INVOKABLE bool deleteSelectedFeatures( int *deletedCount = nullptr, DeleteContext *context = nullptr );
1314 
1335  Q_DECL_DEPRECATED Qgis::GeometryOperationResult addRing( const QVector<QgsPointXY> &ring, QgsFeatureId *featureId = nullptr ) SIP_DEPRECATED;
1336 
1337 
1357  Q_INVOKABLE Qgis::GeometryOperationResult addRing( const QgsPointSequence &ring, QgsFeatureId *featureId = nullptr );
1358 
1379  Q_INVOKABLE Qgis::GeometryOperationResult addRing( QgsCurve *ring SIP_TRANSFER, QgsFeatureId *featureId = nullptr ) SIP_PYNAME( addCurvedRing );
1380 
1400  Q_DECL_DEPRECATED Qgis::GeometryOperationResult addPart( const QList<QgsPointXY> &ring ) SIP_DEPRECATED;
1401 
1402 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
1403 
1424  Q_DECL_DEPRECATED Qgis::GeometryOperationResult addPart( const QVector<QgsPointXY> &ring ) SIP_PYNAME( addPartV2 ) SIP_DEPRECATED;
1425 #endif
1426 
1446  Q_INVOKABLE Qgis::GeometryOperationResult addPart( const QgsPointSequence &ring ) SIP_PYNAME( addPartV2 );
1447 
1455  Q_INVOKABLE Qgis::GeometryOperationResult addPart( QgsCurve *ring SIP_TRANSFER ) SIP_PYNAME( addCurvedPart );
1456 
1468  Q_INVOKABLE int translateFeature( QgsFeatureId featureId, double dx, double dy );
1469 
1490  Q_DECL_DEPRECATED Qgis::GeometryOperationResult splitParts( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false ) SIP_DEPRECATED;
1491 
1511  Q_INVOKABLE Qgis::GeometryOperationResult splitParts( const QgsPointSequence &splitLine, bool topologicalEditing = false );
1512 
1533  Q_DECL_DEPRECATED Qgis::GeometryOperationResult splitFeatures( const QVector<QgsPointXY> &splitLine, bool topologicalEditing = false ) SIP_DEPRECATED;
1534 
1554  Q_INVOKABLE Qgis::GeometryOperationResult splitFeatures( const QgsPointSequence &splitLine, bool topologicalEditing = false );
1555 
1578  Q_INVOKABLE Qgis::GeometryOperationResult splitFeatures( const QgsCurve *curve, QgsPointSequence &topologyTestPoints SIP_OUT, bool preserveCircular = false, bool topologicalEditing = false );
1579 
1593  int addTopologicalPoints( const QgsGeometry &geom );
1594 
1611  Q_DECL_DEPRECATED int addTopologicalPoints( const QgsPointXY &p ) SIP_DEPRECATED;
1612 
1629  int addTopologicalPoints( const QgsPoint &p );
1630 
1647  int addTopologicalPoints( const QgsPointSequence &ps );
1648 
1655  const QgsAbstractVectorLayerLabeling *labeling() const SIP_SKIP { return mLabeling; }
1656 
1663  QgsAbstractVectorLayerLabeling *labeling() { return mLabeling; }
1664 
1669  void setLabeling( QgsAbstractVectorLayerLabeling *labeling SIP_TRANSFER );
1670 
1672  bool isEditable() const FINAL;
1673 
1675  bool isSpatial() const FINAL;
1676 
1678  bool isModified() const override;
1679 
1686  bool isAuxiliaryField( int index, int &srcIndex ) const;
1687 
1689  void reload() FINAL;
1690 
1695  QgsMapLayerRenderer *createMapRenderer( QgsRenderContext &rendererContext ) FINAL SIP_FACTORY;
1696 
1697  QgsRectangle extent() const FINAL;
1698  QgsRectangle sourceExtent() const FINAL;
1699 
1706  QgsFields fields() const FINAL;
1707 
1711  inline QgsAttributeList attributeList() const { return mFields.allAttributesList(); }
1712 
1716  QgsAttributeList primaryKeyAttributes() const;
1717 
1723  long long featureCount() const FINAL;
1724 
1729  bool setReadOnly( bool readonly = true );
1730 
1736  bool supportsEditing() const override;
1737 
1758  bool changeGeometry( QgsFeatureId fid, QgsGeometry &geometry, bool skipDefaultValue = false );
1759 
1790  bool changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue = QVariant(), bool skipDefaultValues = false );
1791 
1827  bool changeAttributeValues( QgsFeatureId fid, const QgsAttributeMap &newValues, const QgsAttributeMap &oldValues = QgsAttributeMap(), bool skipDefaultValues = false );
1828 
1838  bool addAttribute( const QgsField &field );
1839 
1845  void setFieldAlias( int index, const QString &aliasString );
1846 
1852  void removeFieldAlias( int index );
1853 
1864  bool renameAttribute( int index, const QString &newName );
1865 
1872  QString attributeAlias( int index ) const;
1873 
1875  QString attributeDisplayName( int index ) const;
1876 
1878  QgsStringMap attributeAliases() const;
1879 
1884  Q_DECL_DEPRECATED QSet<QString> excludeAttributesWms() const SIP_DEPRECATED;
1885 
1890  Q_DECL_DEPRECATED void setExcludeAttributesWms( const QSet<QString> &att ) SIP_DEPRECATED;
1891 
1896  Q_DECL_DEPRECATED QSet<QString> excludeAttributesWfs() const SIP_DEPRECATED;
1897 
1902  Q_DECL_DEPRECATED void setExcludeAttributesWfs( const QSet<QString> &att ) SIP_DEPRECATED;
1903 
1912  virtual bool deleteAttribute( int attr );
1913 
1921  bool deleteAttributes( const QList<int> &attrs );
1922 
1923  bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) FINAL;
1924 
1935  bool deleteFeature( QgsFeatureId fid, DeleteContext *context = nullptr );
1936 
1950  bool deleteFeatures( const QgsFeatureIds &fids, DeleteContext *context = nullptr );
1951 
1975  Q_INVOKABLE bool commitChanges( bool stopEditing = true );
1976 
1982  QStringList commitErrors() const;
1983 
1993  Q_INVOKABLE bool rollBack( bool deleteBuffer = true );
1994 
2001  QList<QgsRelation> referencingRelations( int idx ) const;
2002 
2009  QList<QgsWeakRelation> weakRelations( ) const SIP_SKIP;
2010 
2011 
2013  Q_INVOKABLE QgsVectorLayerEditBuffer *editBuffer() { return mEditBuffer; }
2014 
2019  const QgsVectorLayerEditBuffer *editBuffer() const SIP_SKIP { return mEditBuffer; }
2020 
2025  void beginEditCommand( const QString &text );
2026 
2028  void endEditCommand();
2029 
2031  void destroyEditCommand();
2032 
2037  Q_DECL_DEPRECATED static void drawVertexMarker( double x, double y, QPainter &p, Qgis::VertexMarkerType type, int vertexSize );
2038 
2047  void updateFields();
2048 
2063  QVariant defaultValue( int index, const QgsFeature &feature = QgsFeature(),
2064  QgsExpressionContext *context = nullptr ) const;
2065 
2077  void setDefaultValueDefinition( int index, const QgsDefaultValue &definition );
2078 
2089  QgsDefaultValue defaultValueDefinition( int index ) const;
2090 
2098  QgsFieldConstraints::Constraints fieldConstraints( int fieldIndex ) const;
2099 
2105  QMap< QgsFieldConstraints::Constraint, QgsFieldConstraints::ConstraintStrength> fieldConstraintsAndStrength( int fieldIndex ) const;
2106 
2116 
2124  void removeFieldConstraint( int index, QgsFieldConstraints::Constraint constraint );
2125 
2133  QString constraintExpression( int index ) const;
2134 
2142  QString constraintDescription( int index ) const;
2143 
2152  void setConstraintExpression( int index, const QString &expression, const QString &description = QString() );
2153 
2159  void setFieldConfigurationFlags( int index, QgsField::ConfigurationFlags flags ) SIP_SKIP;
2160 
2165  void setFieldConfigurationFlag( int index, QgsField::ConfigurationFlag flag, bool active ) SIP_SKIP;
2166 
2172  QgsField::ConfigurationFlags fieldConfigurationFlags( int index ) const SIP_SKIP;
2173 
2177  void setEditorWidgetSetup( int index, const QgsEditorWidgetSetup &setup );
2178 
2185  QgsEditorWidgetSetup editorWidgetSetup( int index ) const;
2186 
2198  QSet<QVariant> uniqueValues( int fieldIndex, int limit = -1 ) const FINAL;
2199 
2213  QStringList uniqueStringsMatching( int index, const QString &substring, int limit = -1,
2214  QgsFeedback *feedback = nullptr ) const;
2215 
2230  QVariant minimumValue( int index ) const FINAL;
2231 
2246  QVariant maximumValue( int index ) const FINAL;
2247 
2248 
2268  void minimumAndMaximumValue( int index, QVariant &minimum SIP_OUT, QVariant &maximum SIP_OUT ) const;
2269 
2284  QVariant aggregate( QgsAggregateCalculator::Aggregate aggregate,
2285  const QString &fieldOrExpression,
2286  const QgsAggregateCalculator::AggregateParameters &parameters = QgsAggregateCalculator::AggregateParameters(),
2287  QgsExpressionContext *context = nullptr,
2288  bool *ok = nullptr,
2289  QgsFeatureIds *fids = nullptr,
2290  QgsFeedback *feedback = nullptr,
2291  QString *error SIP_PYARGREMOVE = nullptr ) const;
2292 
2294  void setFeatureBlendMode( QPainter::CompositionMode blendMode );
2296  QPainter::CompositionMode featureBlendMode() const;
2297 
2298  QString htmlMetadata() const FINAL;
2299 
2304  void setSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod ) { mSimplifyMethod = simplifyMethod; }
2305 
2310  inline const QgsVectorSimplifyMethod &simplifyMethod() const { return mSimplifyMethod; }
2311 
2317  bool simplifyDrawingCanbeApplied( const QgsRenderContext &renderContext, QgsVectorSimplifyMethod::SimplifyHint simplifyHint ) const;
2318 
2326  QgsConditionalLayerStyles *conditionalStyles() const;
2327 
2332  QgsAttributeTableConfig attributeTableConfig() const;
2333 
2338  void setAttributeTableConfig( const QgsAttributeTableConfig &attributeTableConfig );
2339 
2347  QString mapTipTemplate() const;
2348 
2356  void setMapTipTemplate( const QString &mapTipTemplate );
2357 
2359 
2360  QgsExpressionContextScope *createExpressionContextScope() const FINAL SIP_FACTORY;
2361 
2369  QgsEditFormConfig editFormConfig() const;
2370 
2377  void setEditFormConfig( const QgsEditFormConfig &editFormConfig );
2378 
2386  void setReadExtentFromXml( bool readExtentFromXml );
2387 
2395  bool readExtentFromXml() const;
2396 
2402  bool isEditCommandActive() const { return mEditCommandActive; }
2403 
2409  QgsGeometryOptions *geometryOptions() const;
2410 
2428  bool allowCommit() const SIP_SKIP;
2429 
2447  void setAllowCommit( bool allowCommit ) SIP_SKIP;
2448 
2454  QgsStoredExpressionManager *storedExpressionManager() { return mStoredExpressionManager; }
2455 
2456  public slots:
2457 
2465  void select( QgsFeatureId featureId );
2466 
2474  Q_INVOKABLE void select( const QgsFeatureIds &featureIds );
2475 
2483  void deselect( QgsFeatureId featureId );
2484 
2492  Q_INVOKABLE void deselect( const QgsFeatureIds &featureIds );
2493 
2500  Q_INVOKABLE void removeSelection();
2501 
2512  void reselect();
2513 
2520  virtual void updateExtents( bool force = false );
2521 
2536  Q_INVOKABLE bool startEditing();
2537 
2543  virtual void setTransformContext( const QgsCoordinateTransformContext &transformContext ) override;
2544 
2545  SpatialIndexPresence hasSpatialIndex() const override;
2546 
2547  bool accept( QgsStyleEntityVisitorInterface *visitor ) const override;
2548 
2549  signals:
2550 
2558  void selectionChanged( const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect );
2559 
2566 
2568  void beforeModifiedCheck() const;
2569 
2572 
2578  void beforeCommitChanges( bool stopEditing );
2579 
2582 
2588 
2594 
2603  void attributeAdded( int idx );
2604 
2611  void beforeAddingExpressionField( const QString &fieldName );
2612 
2621  void attributeDeleted( int idx );
2622 
2630 
2637 
2647 
2657  void featuresDeleted( const QgsFeatureIds &fids );
2658 
2664 
2670 
2679  void attributeValueChanged( QgsFeatureId fid, int idx, const QVariant &value );
2680 
2688  void geometryChanged( QgsFeatureId fid, const QgsGeometry &geometry );
2689 
2691  void committedAttributesDeleted( const QString &layerId, const QgsAttributeList &deletedAttributes );
2693  void committedAttributesAdded( const QString &layerId, const QList<QgsField> &addedAttributes );
2695  void committedFeaturesAdded( const QString &layerId, const QgsFeatureList &addedFeatures );
2697  void committedFeaturesRemoved( const QString &layerId, const QgsFeatureIds &deletedFeatureIds );
2699  void committedAttributeValuesChanges( const QString &layerId, const QgsChangedAttributesMap &changedAttributesValues );
2701  void committedGeometriesChanges( const QString &layerId, const QgsGeometryMap &changedGeometries );
2702 
2704  void labelingFontNotFound( QgsVectorLayer *layer, const QString &fontfamily );
2705 
2707  void featureBlendModeChanged( QPainter::CompositionMode blendMode );
2708 
2714  void editCommandStarted( const QString &text );
2715 
2722 
2729 
2739  void readCustomSymbology( const QDomElement &element, QString &errorMessage );
2740 
2750  void writeCustomSymbology( QDomElement &element, QDomDocument &doc, QString &errorMessage ) const;
2751 
2758 
2765 
2769  void raiseError( const QString &msg );
2770 
2777 
2785 
2792 
2799 
2800  protected:
2802  void setExtent( const QgsRectangle &rect ) FINAL;
2803 
2804  private slots:
2805  void invalidateSymbolCountedFlag();
2806  void onFeatureCounterCompleted();
2807  void onFeatureCounterTerminated();
2808  void onJoinedFieldsChanged();
2809  void onFeatureDeleted( QgsFeatureId fid );
2810  void onRelationsLoaded();
2811  void onSymbolsCounted();
2812  void onDirtyTransaction( const QString &sql, const QString &name );
2813  void emitDataChanged();
2814  void onAfterCommitChangesDependency();
2815 
2816  private:
2817  void updateDefaultValues( QgsFeatureId fid, QgsFeature feature = QgsFeature() );
2818 
2822  bool isReadOnly() const FINAL;
2823 
2830  bool setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags = QgsDataProvider::ReadFlags() );
2831 
2843  void setDataSourcePrivate( const QString &dataSource, const QString &baseName, const QString &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags ) override;
2844 
2846  void readSldLabeling( const QDomNode &node );
2847 
2849  bool readSldTextSymbolizer( const QDomNode &node, QgsPalLayerSettings &settings ) const;
2850 
2852  QgsAbstractVectorLayerLabeling *readLabelingFromCustomProperties();
2853 
2854  bool deleteFeatureCascade( QgsFeatureId fid, DeleteContext *context = nullptr );
2855 
2856 #ifdef SIP_RUN
2857  QgsVectorLayer( const QgsVectorLayer &rhs );
2858 #endif
2860  void minimumOrMaximumValue( int index, QVariant *minimum, QVariant *maximum ) const;
2861 
2862  QgsConditionalLayerStyles *mConditionalStyles = nullptr;
2863 
2865  QgsVectorDataProvider *mDataProvider = nullptr;
2866 
2868  QgsVectorLayerTemporalProperties *mTemporalProperties = nullptr;
2869 
2871  QString mDisplayExpression;
2872 
2873  QString mMapTipTemplate;
2874 
2876  QgsActionManager *mActions = nullptr;
2877 
2879  bool mReadOnly = false;
2880 
2886  QgsFeatureIds mSelectedFeatureIds;
2887 
2891  QgsFeatureIds mPreviousSelectedFeatureIds;
2892 
2894  QgsFields mFields;
2895 
2897  QgsStringMap mAttributeAliasMap;
2898 
2900  QMap<QString, QgsDefaultValue> mDefaultExpressionMap;
2901 
2903  QSet<int> mDefaultValueOnUpdateFields;
2904 
2906  QMap< QString, QgsFieldConstraints::Constraints > mFieldConstraints;
2907 
2909  QMap< QPair< QString, QgsFieldConstraints::Constraint >, QgsFieldConstraints::ConstraintStrength > mFieldConstraintStrength;
2910 
2912  QMap< QString, QPair< QString, QString > > mFieldConstraintExpressions;
2913 
2914  QMap< QString, QgsField::ConfigurationFlags > mFieldConfigurationFlags;
2915  QMap< QString, QgsEditorWidgetSetup > mFieldWidgetSetups;
2916 
2918  QgsEditFormConfig mEditFormConfig;
2919 
2922 
2924  QgsFeatureRenderer *mRenderer = nullptr;
2925 
2927  QgsVectorSimplifyMethod mSimplifyMethod;
2928 
2930  QgsAbstractVectorLayerLabeling *mLabeling = nullptr;
2931 
2933  bool mLabelsEnabled = false;
2934 
2936  bool mLabelFontNotFoundNotified = false;
2937 
2939  QPainter::CompositionMode mFeatureBlendMode = QPainter::CompositionMode_SourceOver;
2940 
2942  bool mVertexMarkerOnlyForSelection = false;
2943 
2944  QStringList mCommitErrors;
2945 
2947  QgsVectorLayerEditBuffer *mEditBuffer = nullptr;
2950 
2951  //stores information about joined layers
2952  QgsVectorLayerJoinBuffer *mJoinBuffer = nullptr;
2953 
2955  QgsExpressionFieldBuffer *mExpressionFieldBuffer = nullptr;
2956 
2957  //diagram rendering object. 0 if diagram drawing is disabled
2958  QgsDiagramRenderer *mDiagramRenderer = nullptr;
2959 
2960  //stores infos about diagram placement (placement type, priority, position distance)
2961  QgsDiagramLayerSettings *mDiagramLayerSettings = nullptr;
2962 
2963  mutable bool mValidExtent = false;
2964  mutable bool mLazyExtent = true;
2965 
2967  std::unique_ptr<QgsAuxiliaryLayer> mAuxiliaryLayer;
2968 
2970  QString mAuxiliaryLayerKey;
2971 
2972  // Features in renderer classes counted
2973  bool mSymbolFeatureCounted = false;
2974 
2975  // Feature counts for each renderer legend key
2976  QHash<QString, long long> mSymbolFeatureCountMap;
2977  QHash<QString, QgsFeatureIds> mSymbolFeatureIdMap;
2978 
2980  bool mEditCommandActive = false;
2981 
2983  bool mCommitChangesActive = false;
2984 
2985  bool mReadExtentFromXml;
2986  QgsRectangle mXmlExtent;
2987 
2988  QgsFeatureIds mDeletedFids;
2989 
2990  QgsAttributeTableConfig mAttributeTableConfig;
2991 
2992  mutable QMutex mFeatureSourceConstructorMutex;
2993 
2994  QgsVectorLayerFeatureCounter *mFeatureCounter = nullptr;
2995 
2996  std::unique_ptr<QgsGeometryOptions> mGeometryOptions;
2997 
2998  bool mAllowCommit = true;
2999 
3001  QgsStoredExpressionManager *mStoredExpressionManager = nullptr;
3002 
3004 
3006  bool mDataChangedFired = false;
3007 
3008  QList<QgsWeakRelation> mWeakRelations;
3009 
3010  bool mSetLegendFromStyle = false;
3011 
3012  QList< QgsFeatureRendererGenerator * > mRendererGenerators;
3013 };
3014 
3015 
3016 
3017 // clazy:excludeall=qstring-allocations
3018 
3019 #endif
The Qgis class provides global constants for use throughout the application.
Definition: qgis.h:64
GeometryOperationResult
Success or failure of a geometry operation.
Definition: qgis.h:681
VertexMarkerType
Editing vertex markers, used for showing vertices during a edit operation.
Definition: qgis.h:588
SelectBehavior
Specifies how a selection should be applied.
Definition: qgis.h:559
@ SetSelection
Set selection, removing any existing selection.
Abstract base class for simplify geometries using a specific algorithm.
Abstract base class - its implementations define different approaches to the labeling of a vector lay...
Storage and management of actions associated with a layer.
Utility class for calculating aggregates for a field (or expression) over the features from a vector ...
This is a container for configuration of the attribute table.
Class allowing to manage the auxiliary storage for a vector layer.
Class providing some utility methods to manage auxiliary storage.
The QgsConditionalLayerStyles class holds conditional style information for a layer.
This class represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Abstract base class for curved geometry type.
Definition: qgscurve.h:36
Abstract base class for spatial data provider implementations.
The QgsDefaultValue class provides a container for managing client side default values for fields.
Stores the settings for rendering of all diagrams for a layer.
Evaluates and returns the diagram settings relating to a diagram for a specific feature.
Contains configuration settings for an editor form.
Holder for the widget type and its configuration for a field.
Manages an editor widget Widget and wrapper share the same parent.
Abstract interface for generating an expression context.
virtual QgsExpressionContext createExpressionContext() const =0
This method needs to be reimplemented in all classes which implement this interface and return an exp...
Abstract interface for generating an expression context scope.
Single scope for storing variables and functions for use within a QgsExpressionContext.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Buffers information about expression fields for a vector layer.
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
An interface for objects which generate feature renderers for vector layers.
This class wraps a request for features to a vector layer (or directly its vector data provider).
An interface for objects which accept features via addFeature(s) methods.
virtual bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())
Adds a single feature to the sink.
An interface for objects which provide features via a getFeatures method.
virtual QSet< QVariant > uniqueValues(int fieldIndex, int limit=-1) const
Returns the set of unique values contained within the specified fieldIndex from this source.
virtual QgsWkbTypes::Type wkbType() const =0
Returns the geometry type for features returned by this source.
virtual QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const =0
Returns an iterator for the features in the source.
virtual long long featureCount() const =0
Returns the number of features contained in the source, or -1 if the feature count is unknown.
virtual SpatialIndexPresence hasSpatialIndex() const
Returns an enum value representing the presence of a valid spatial index on the source,...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition: qgsfeature.h:56
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition: qgsfeedback.h:45
ConstraintStrength
Strength of constraints.
@ ConstraintStrengthHard
Constraint must be honored before feature can be accepted.
Constraint
Constraints which may be present on a field.
Encapsulate a field in an attribute table or data source.
Definition: qgsfield.h:51
ConfigurationFlag
Configuration flags for fields These flags are meant to be user-configurable and are not describing a...
Definition: qgsfield.h:80
Container of fields for a vector layer.
Definition: qgsfields.h:45
The QgsGeometryOptions class contains options to automatically adjust geometries to constraints on a ...
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:125
Base class for utility classes that encapsulate information necessary for rendering of map layers.
Base class for storage of map layer temporal properties.
Base class for all map layer types.
Definition: qgsmaplayer.h:73
virtual bool accept(QgsStyleEntityVisitorInterface *visitor) const
Accepts the specified symbology visitor, causing it to visit all symbols associated with the layer.
virtual bool setDependencies(const QSet< QgsMapLayerDependency > &layers)
Sets the list of dependencies.
virtual QSet< QgsMapLayerDependency > dependencies() const
Gets the list of dependencies.
friend class QgsVectorLayer
Definition: qgsmaplayer.h:2116
virtual bool isEditable() const
Returns true if the layer can be edited.
virtual QgsMapLayer * clone() const =0
Returns a new instance equivalent to this one except for the id which is still unique.
virtual void setExtent(const QgsRectangle &rect)
Sets the extent.
virtual void setTransformContext(const QgsCoordinateTransformContext &transformContext)=0
Sets the coordinate transform context to transformContext.
Perform transforms between map coordinates and device coordinates.
Definition: qgsmaptopixel.h:39
Contains settings for how a map layer will be labeled.
A class to represent a 2D point.
Definition: qgspointxy.h:59
Point geometry type, with support for z-dimension and m-values.
Definition: qgspoint.h:49
Encapsulates a QGIS project, including sets of map layers and their styles, layouts,...
Definition: qgsproject.h:101
The class is used as a container of context for various read/write operations on other objects.
A rectangle specified with double values.
Definition: qgsrectangle.h:42
This class manages a set of relations between layers.
Contains information about the context of a rendering operation.
Manages stored expressions regarding creation, modification and storing in the project.
An interface for classes which can visit style entity (e.g.
Abstract base class for all rendered symbols.
Definition: qgssymbol.h:38
This is the base class for vector data providers.
Counts the features in a QgsVectorLayer in task.
Partial snapshot of vector layer's state (only the members necessary for access to features)
Manages joined fields for a vector layer.
Defines left outer join from our vector layer to some other vector layer.
Implementation of map layer temporal properties for vector layers.
Represents a vector layer which manages a vector based data sets.
const QgsActionManager * actions() const
Returns all layer actions defined on this layer.
void committedFeaturesAdded(const QString &layerId, const QgsFeatureList &addedFeatures)
Emitted when features are added to the provider if not in transaction mode.
void labelingFontNotFound(QgsVectorLayer *layer, const QString &fontfamily)
Emitted when the font family defined for labeling layer is not found on system.
void featureBlendModeChanged(QPainter::CompositionMode blendMode)
Signal emitted when setFeatureBlendMode() is called.
void beforeRemovingExpressionField(int idx)
Will be emitted, when an expression field is going to be deleted from this vector layer.
void committedGeometriesChanges(const QString &layerId, const QgsGeometryMap &changedGeometries)
Emitted when geometry changes are saved to the provider if not in transaction mode.
void beforeCommitChanges(bool stopEditing)
Emitted before changes are committed to the data provider.
void mapTipTemplateChanged()
Emitted when the map tip changes.
void attributeAdded(int idx)
Will be emitted, when a new attribute has been added to this vector layer.
void allowCommitChanged()
Emitted whenever the allowCommitChanged() property of this layer changes.
void editCommandStarted(const QString &text)
Signal emitted when a new edit command has been started.
QgsVectorLayer & operator=(QgsVectorLayer const &rhs)=delete
QgsVectorLayer cannot be copied.
void editCommandDestroyed()
Signal emitted, when an edit command is destroyed.
QgsVectorLayer(const QgsVectorLayer &rhs)=delete
QgsVectorLayer cannot be copied.
const QgsDiagramLayerSettings * diagramLayerSettings() const
void featuresDeleted(const QgsFeatureIds &fids)
Emitted when features have been deleted.
void subsetStringChanged()
Emitted when the layer's subset string has changed.
void committedFeaturesRemoved(const QString &layerId, const QgsFeatureIds &deletedFeatureIds)
Emitted when features are deleted from the provider if not in transaction mode.
void symbolFeatureCountMapChanged()
Emitted when the feature count for symbols on this layer has been recalculated.
void writeCustomSymbology(QDomElement &element, QDomDocument &doc, QString &errorMessage) const
Signal emitted whenever the symbology (QML-file) for this layer is being written.
QgsAbstractVectorLayerLabeling * labeling()
Access to labeling configuration.
void attributeDeleted(int idx)
Will be emitted, when an attribute has been deleted from this vector layer.
void beforeEditingStarted()
Emitted before editing on this layer is started.
void committedAttributeValuesChanges(const QString &layerId, const QgsChangedAttributesMap &changedAttributesValues)
Emitted when attribute value changes are saved to the provider if not in transaction mode.
void committedAttributesAdded(const QString &layerId, const QList< QgsField > &addedAttributes)
Emitted when attributes are added to the provider if not in transaction mode.
void committedAttributesDeleted(const QString &layerId, const QgsAttributeList &deletedAttributes)
Emitted when attributes are deleted from the provider if not in transaction mode.
void displayExpressionChanged()
Emitted when the display expression changes.
void editFormConfigChanged()
Will be emitted whenever the edit form configuration of this layer changes.
void afterCommitChanges()
Emitted after changes are committed to the data provider.
const QgsFeatureRenderer * renderer() const
Returns the feature renderer used for rendering the features in the layer in 2D map views.
QgsFeature getFeature(QgsFeatureId fid) const
Queries the layer for the feature with the given id.
void raiseError(const QString &msg)
Signals an error related to this vector layer.
void editCommandEnded()
Signal emitted, when an edit command successfully ended.
void supportsEditingChanged()
Emitted when the read only state or the data provider of this layer is changed.
void readOnlyChanged()
Emitted when the read only state of this layer is changed.
void attributeValueChanged(QgsFeatureId fid, int idx, const QVariant &value)
Emitted whenever an attribute value change is done in the edit buffer.
QgsFeatureIterator getFeatures(const QgsFeatureIds &fids)
Queries the layer for the features with the given ids.
void afterRollBack()
Emitted after changes are rolled back.
const QgsVectorLayerJoinBuffer * joinBuffer() const
Returns a const pointer on join buffer object.
void selectionChanged(const QgsFeatureIds &selected, const QgsFeatureIds &deselected, bool clearAndSelect)
Emitted when selection was changed.
void beforeAddingExpressionField(const QString &fieldName)
Will be emitted, when an expression field is going to be added to this vector layer.
void updatedFields()
Emitted whenever the fields available from this layer have been changed.
void featureAdded(QgsFeatureId fid)
Emitted when a new feature has been added to the layer.
void featureDeleted(QgsFeatureId fid)
Emitted when a feature has been deleted.
void readCustomSymbology(const QDomElement &element, QString &errorMessage)
Signal emitted whenever the symbology (QML-file) for this layer is being read.
void beforeRollBack()
Emitted before changes are rolled back.
const QgsDiagramRenderer * diagramRenderer() const
void geometryChanged(QgsFeatureId fid, const QgsGeometry &geometry)
Emitted whenever a geometry change is done in the edit buffer.
QgsFeatureIterator getFeatures(const QgsRectangle &rectangle)
Queries the layer for the features which intersect the specified rectangle.
const QgsVectorSimplifyMethod & simplifyMethod() const
Returns the simplification settings for fast rendering of features.
void beforeModifiedCheck() const
Emitted when the layer is checked for modifications. Use for last-minute additions.
const QgsVectorLayerEditBuffer * editBuffer() const
Buffer with uncommitted editing operations.
QgsFeatureRenderer * renderer()
Returns the feature renderer used for rendering the features in the layer in 2D map views.
This class contains information how to simplify geometries fetched from a vector layer.
SimplifyHint
Simplification flags for fast rendering of features.
The QgsWeakRelation class represent a QgsRelation with possibly unresolved layers or unmatched fields...
GeometryType
The geometry types are used to group QgsWkbTypes::Type in a coarse way.
Definition: qgswkbtypes.h:141
Type
The WKB type describes the number of dimensions a geometry has.
Definition: qgswkbtypes.h:70
#define str(x)
Definition: qgis.cpp:37
QMap< QString, QString > QgsStringMap
Definition: qgis.h:2026
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
#define SIP_SKIP
Definition: qgis_sip.h:126
#define FINAL
Definition: qgis_sip.h:228
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81
#define SIP_PYARGREMOVE
Definition: qgis_sip.h:146
#define SIP_TRANSFER
Definition: qgis_sip.h:36
#define SIP_OUT
Definition: qgis_sip.h:58
#define SIP_FACTORY
Definition: qgis_sip.h:76
QVector< QgsPoint > QgsPointSequence
QMap< int, QVariant > QgsAttributeMap
Definition: qgsattributes.h:38
QMap< QgsFeatureId, QgsGeometry > QgsGeometryMap
Definition: qgsfeature.h:877
QMap< QgsFeatureId, QgsAttributeMap > QgsChangedAttributesMap
Definition: qgsfeature.h:868
QList< QgsFeature > QgsFeatureList
Definition: qgsfeature.h:882
QSet< QgsFeatureId > QgsFeatureIds
Definition: qgsfeatureid.h:37
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features
Definition: qgsfeatureid.h:28
QList< int > QgsAttributeList
Definition: qgsfield.h:26
const QgsField & field
Definition: qgsfield.h:463
QList< int > QgsAttributeList
QSet< int > QgsAttributeIds
Context for cascade delete features.
DeleteContext(bool cascade=false, QgsProject *project=nullptr)
Constructor for DeleteContext.
Setting options for loading vector layers.
LayerOptions(bool loadDefaultStyle=true, bool readExtentFromXml=false)
Constructor for LayerOptions.
LayerOptions(const QgsCoordinateTransformContext &transformContext, bool loadDefaultStyle=true, bool readExtentFromXml=false)
Constructor for LayerOptions.
QgsCoordinateReferenceSystem fallbackCrs
Fallback layer coordinate reference system.