QGIS API Documentation 4.1.0-Master (376402f9aeb)
Loading...
Searching...
No Matches
qgsvectorfilewriter.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsvectorfilewriter.h
3 generic vector file writer
4 -------------------
5 begin : Jun 6 2004
6 copyright : (C) 2004 by Tim Sutton
7 email : tim at linfiniti.com
8 ***************************************************************************/
9
10/***************************************************************************
11 * *
12 * This program is free software; you can redistribute it and/or modify *
13 * it under the terms of the GNU General Public License as published by *
14 * the Free Software Foundation; either version 2 of the License, or *
15 * (at your option) any later version. *
16 * *
17 ***************************************************************************/
18
19#ifndef QGSVECTORFILEWRITER_H
20#define QGSVECTORFILEWRITER_H
21
22#include <ogr_api.h>
23
24#include "qgis_core.h"
25#include "qgis_sip.h"
27#include "qgsfeaturesink.h"
28#include "qgsfeedback.h"
29#include "qgsfields.h"
30#include "qgsgeometryengine.h"
31#include "qgsogrutils.h"
32#include "qgsrendercontext.h"
33#include "qgsrenderer.h"
34
35#include <QString>
36
37using namespace Qt::StringLiterals;
38
39class QgsSymbolLayer;
40class QTextCodec;
43
53class CORE_EXPORT QgsVectorFileWriter : public QgsFeatureSink
54{
55 public:
63
68 class Option
69 {
70 public:
75 virtual ~Option() = default;
76
77 QString docString;
79 };
80
86 {
87 public:
88 SetOption( const QString &docString, const QStringList &values, const QString &defaultValue, bool allowNone = false )
89 : Option( docString, Set )
90 , values( values.begin(), values.end() )
93 {}
94
95 QSet<QString> values;
96 QString defaultValue;
98 };
99
105 {
106 public:
107 StringOption( const QString &docString, const QString &defaultValue = QString() )
110 {}
111
113 };
114
120 {
121 public:
122 IntOption( const QString &docString, int defaultValue )
123 : Option( docString, Int )
125 {}
126
128 };
129
135 {
136 public:
137 BoolOption( const QString &docString, bool defaultValue )
138 : SetOption( docString, QStringList() << u"YES"_s << u"NO"_s, defaultValue ? "YES" : "NO" )
139 {}
140 };
141
147 {
148 public:
149 explicit HiddenOption( const QString &value )
150 : Option( QString(), Hidden )
151 , mValue( value )
152 {}
153
154 QString mValue;
155 };
156
157 struct MetaData
158 {
159 MetaData() = default;
160
162 const QString &longName,
163 const QString &trLongName,
164 const QString &glob,
165 const QString &ext,
166 const QMap<QString, QgsVectorFileWriter::Option *> &driverOptions,
167 const QMap<QString, QgsVectorFileWriter::Option *> &layerOptions,
168 const QString &compulsoryEncoding = QString()
169 )
170 : longName( longName )
172 , glob( glob )
173 , ext( ext )
177 {}
178
179 QString longName;
180 QString trLongName;
181 QString glob;
182 QString ext;
183 QMap<QString, QgsVectorFileWriter::Option *> driverOptions;
184 QMap<QString, QgsVectorFileWriter::Option *> layerOptions;
187 };
188
203
214
225
226
230 class CORE_EXPORT FieldValueConverter
231 {
232 public:
234
235 virtual ~FieldValueConverter() = default;
236
242 virtual QgsField fieldDefinition( const QgsField &field );
243
250 virtual QVariant convert( int fieldIdxInLayer, const QVariant &value );
251
256 };
257
275
280
281
298
299#ifndef SIP_RUN
300
302
329#else
330
356#endif
358 QgsVectorLayer *layer,
359 const QString &fileName,
360 const QString &fileEncoding,
362 const QString &driverName = "GPKG",
363 bool onlySelected = false,
364 QString *errorMessage SIP_OUT = nullptr,
365 const QStringList &datasourceOptions = QStringList(),
366 const QStringList &layerOptions = QStringList(),
367 bool skipAttributeCreation = false,
368 QString *newFilename = nullptr,
370 double symbologyScale = 1.0,
371 const QgsRectangle *filterExtent = nullptr,
372 Qgis::WkbType overrideGeometryType = Qgis::WkbType::Unknown,
373 bool forceMulti = false,
374 bool includeZ = false,
375 const QgsAttributeList &attributes = QgsAttributeList(),
376 QgsVectorFileWriter::FieldValueConverter *fieldValueConverter = nullptr
377#ifndef SIP_RUN
378 ,
379 QString *newLayer = nullptr
380 );
381#else
383#endif
384
385#ifndef SIP_RUN
386
414#else
415
442#endif
444 QgsVectorLayer *layer,
445 const QString &fileName,
446 const QString &fileEncoding,
447 const QgsCoordinateTransform &ct,
448 const QString &driverName = "GPKG",
449 bool onlySelected = false,
450 QString *errorMessage SIP_OUT = nullptr,
451 const QStringList &datasourceOptions = QStringList(),
452 const QStringList &layerOptions = QStringList(),
453 bool skipAttributeCreation = false,
454 QString *newFilename = nullptr,
456 double symbologyScale = 1.0,
457 const QgsRectangle *filterExtent = nullptr,
458 Qgis::WkbType overrideGeometryType = Qgis::WkbType::Unknown,
459 bool forceMulti = false,
460 bool includeZ = false,
461 const QgsAttributeList &attributes = QgsAttributeList(),
462 QgsVectorFileWriter::FieldValueConverter *fieldValueConverter = nullptr
463#ifndef SIP_RUN
464 ,
465 QString *newLayer = nullptr
466 );
467#else
469#endif
470
607
608#ifndef SIP_RUN
609
621#else
622
633#endif
635 QgsVectorLayer *layer,
636 const QString &fileName,
638 QString *newFilename = nullptr,
639 QString *errorMessage SIP_OUT = nullptr
640#ifndef SIP_RUN
641 ,
642 QString *newLayer = nullptr
643 );
644#else
646#endif
647
652 Q_DECL_DEPRECATED QgsVectorFileWriter(
653 const QString &vectorFileName,
654 const QString &fileEncoding,
655 const QgsFields &fields,
656 Qgis::WkbType geometryType,
658 const QString &driverName = "GPKG",
659 const QStringList &datasourceOptions = QStringList(),
660 const QStringList &layerOptions = QStringList(),
661 QString *newFilename = nullptr,
664#ifndef SIP_RUN
665 ,
666 QString *newLayer = nullptr,
668 FieldNameSource fieldNameSource = Original
669#endif
671
697 Q_DECL_DEPRECATED QgsVectorFileWriter(
698 const QString &vectorFileName,
699 const QString &fileEncoding,
700 const QgsFields &fields,
701 Qgis::WkbType geometryType,
703 const QString &driverName,
704 const QStringList &datasourceOptions,
705 const QStringList &layerOptions,
706 QString *newFilename,
708 QgsVectorFileWriter::FieldValueConverter *fieldValueConverter,
709 const QString &layerName,
711 QString *newLayer = nullptr,
714 FieldNameSource fieldNameSource = Original,
715 bool includeConstraints = false,
716 bool setFieldDomains = true,
717 const QgsAbstractDatabaseProviderConnection *sourceDatabaseProviderConnection = nullptr
718 ) SIP_SKIP;
719
721 QgsVectorFileWriter &operator=( const QgsVectorFileWriter &rh ) = delete;
722
737 const QString &fileName,
738 const QgsFields &fields,
739 Qgis::WkbType geometryType,
741 const QgsCoordinateTransformContext &transformContext,
744 QString *newFilename = nullptr,
745 QString *newLayer = nullptr
746 ) SIP_FACTORY;
747
760 Q_DECL_DEPRECATED static QgsVectorFileWriter::WriterError writeAsVectorFormatV2(
761 QgsVectorLayer *layer,
762 const QString &fileName,
763 const QgsCoordinateTransformContext &transformContext,
765 QString *newFilename = nullptr,
766 QString *newLayer = nullptr,
767 QString *errorMessage SIP_OUT = nullptr
769
783 QgsVectorLayer *layer,
784 const QString &fileName,
785 const QgsCoordinateTransformContext &transformContext,
787 QString *errorMessage SIP_OUT = nullptr,
788 QString *newFilename SIP_OUT = nullptr,
789 QString *newLayer SIP_OUT = nullptr
790 );
791
796 {
798 QString driverName;
799
802
807 QStringList globs;
808 };
809
818 static QList< QgsVectorFileWriter::FilterFormatDetails > supportedFiltersAndFormats( VectorFormatOptions options = SortRecommended );
819
828 static QStringList supportedFormatExtensions( VectorFormatOptions options = SortRecommended );
829
836 static bool supportsFeatureStyles( const QString &driverName );
837
842 {
844 QString longName;
845
847 QString driverName;
848 };
849
861 static QList< QgsVectorFileWriter::DriverDetails > ogrDriverList( VectorFormatOptions options = SortRecommended );
862
868 static QString driverForExtension( const QString &extension );
869
876 static QString fileFilterString( VectorFormatOptions options = SortRecommended );
877
879 static QString filterForDriver( const QString &driverName );
880
882 static QString convertCodecNameForEncodingOption( const QString &codecName );
883
886
888 QString errorMessage() const;
889
896 QString driver() const;
897
904 QString driverLongName() const;
905
912
913 bool addFeature( QgsFeature &feature, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
914
916 bool addFeatures( QgsFeatureList &features, QgsFeatureSink::Flags flags = QgsFeatureSink::Flags() ) override;
917 QString lastError() const override;
918
923
930
932 ~QgsVectorFileWriter() override;
933
939 static bool deleteShapeFile( const QString &fileName );
940
947
954
960 double symbologyScale() const { return mSymbologyScale; }
961
967 void setSymbologyScale( double scale );
968
969 static bool driverMetadata( const QString &driverName, MetaData &driverMetadata );
970
976 static QStringList defaultDatasetOptions( const QString &driverName );
977
983 static QStringList defaultLayerOptions( const QString &driverName );
984
991 static OGRwkbGeometryType ogrTypeFromWkbType( Qgis::WkbType type ) SIP_SKIP;
992
996 static QgsVectorFileWriter::EditionCapabilities editionCapabilities( const QString &datasetName );
997
1001 static bool targetLayerExists( const QString &datasetName, const QString &layerName );
1002
1006 static bool areThereNewFieldsToCreate( const QString &datasetName, const QString &layerName, QgsVectorLayer *layer, const QgsAttributeList &attributes );
1007
1008 protected:
1010 OGRGeometryH createEmptyGeometry( Qgis::WkbType wkbType ) SIP_SKIP;
1011
1013 OGRLayerH mLayer = nullptr;
1014 OGRSpatialReferenceH mOgrRef = nullptr;
1015
1017
1021
1022 QTextCodec *mCodec = nullptr;
1023
1026
1028 // In particular for a GeoPackage file, a field with the FID column is always put in first position.
1030
1033
1035
1036 QMap< QgsSymbolLayer *, QString > mSymbolLayerTable;
1037
1040
1043
1046
1049
1051 bool mSetFieldDomains = true;
1052
1053 private:
1054#ifdef SIP_RUN
1056#endif
1057
1058 struct PreparedWriterDetails
1059 {
1060 std::unique_ptr< QgsFeatureRenderer > renderer;
1062 Qgis::WkbType sourceWkbType = Qgis::WkbType::Unknown;
1063 QgsFields sourceFields;
1064 QString providerType;
1065 long long featureCount = 0;
1066 QgsFeatureIds selectedFeatureIds;
1067 QString dataSourceUri;
1068 QString storageType;
1069 QgsFeatureIterator geometryTypeScanIterator;
1070 QgsExpressionContext expressionContext;
1071 QSet< int > fieldsToConvertToInt;
1072 QgsRenderContext renderContext;
1073 bool shallTransform = false;
1076 QgsAttributeList attributes;
1077 QgsFields outputFields;
1078 QgsFeatureIterator sourceFeatureIterator;
1079 QgsGeometry filterRectGeometry;
1080 std::unique_ptr< QgsGeometryEngine > filterRectEngine;
1081 QVariantMap providerUriParams;
1082 std::unique_ptr< QgsAbstractDatabaseProviderConnection > sourceDatabaseProviderConnection;
1083 };
1084
1089 static QgsVectorFileWriter::WriterError prepareWriteAsVectorFormat( QgsVectorLayer *layer, const QgsVectorFileWriter::SaveVectorOptions &options, PreparedWriterDetails &details );
1090
1105 static QgsVectorFileWriter::WriterError writeAsVectorFormatV2(
1106 PreparedWriterDetails &details,
1107 const QString &fileName,
1108 const QgsCoordinateTransformContext &transformContext,
1110 QString *newFilename = nullptr,
1111 QString *newLayer = nullptr,
1112 QString *errorMessage SIP_OUT = nullptr,
1114 );
1115
1121 Q_DECL_DEPRECATED static QgsVectorFileWriter::WriterError writeAsVectorFormat(
1122 PreparedWriterDetails &details,
1123 const QString &fileName,
1125 QString *newFilename = nullptr,
1126 QString *errorMessage SIP_OUT = nullptr,
1127 QString *newLayer = nullptr
1129
1130 void init(
1131 QString vectorFileName,
1132 QString fileEncoding,
1133 const QgsFields &fields,
1134 Qgis::WkbType geometryType,
1136 const QString &driverName,
1137 QStringList datasourceOptions,
1138 QStringList layerOptions,
1139 QString *newFilename,
1140 QgsVectorFileWriter::FieldValueConverter *fieldValueConverter,
1141 const QString &layerName,
1142 QgsVectorFileWriter::ActionOnExistingFile action,
1143 QString *newLayer,
1144 QgsFeatureSink::SinkFlags sinkFlags,
1145 const QgsCoordinateTransformContext &transformContext,
1146 FieldNameSource fieldNameSource,
1147 const QgsAbstractDatabaseProviderConnection *sourceDatabaseProviderConnection
1148 );
1149 void resetMap( const QgsAttributeList &attributes );
1150
1151 std::unique_ptr< QgsFeatureRenderer > mRenderer;
1152 QgsRenderContext mRenderContext;
1153
1154
1155 std::unique_ptr< QgsCoordinateTransform > mCoordinateTransform;
1156
1157 bool mUsingTransaction = false;
1158 QSet< QMetaType::Type > mSupportedListSubTypes;
1159
1160 Qgis::VectorFileWriterCapabilities mCapabilities;
1161
1162 void createSymbolLayerTable( QgsVectorLayer *vl, const QgsCoordinateTransform &ct, OGRDataSourceH ds );
1163 gdal::ogr_feature_unique_ptr createFeature( const QgsFeature &feature );
1164 bool writeFeature( OGRLayerH layer, OGRFeatureH feature );
1165
1167 QgsVectorFileWriter::WriterError exportFeaturesSymbolLevels( const PreparedWriterDetails &details, QgsFeatureIterator &fit, const QgsCoordinateTransform &ct, QString *errorMessage = nullptr );
1168 double mmScaleFactor( double scale, Qgis::RenderUnit symbolUnits, Qgis::DistanceUnit mapUnits );
1169 double mapUnitScaleFactor( double scale, Qgis::RenderUnit symbolUnits, Qgis::DistanceUnit mapUnits );
1170
1171 void startRender( QgsFeatureRenderer *sourceRenderer, const QgsFields &fields );
1172 void stopRender();
1173 std::unique_ptr< QgsFeatureRenderer > createSymbologyRenderer( QgsFeatureRenderer *sourceRenderer ) const;
1175 static void addRendererAttributes( QgsFeatureRenderer *renderer, QgsRenderContext &context, const QgsFields &fields, QgsAttributeList &attList );
1176
1178 static QStringList concatenateOptions( const QMap<QString, Option *> &options );
1179
1182};
1183
1186
1187// clazy:excludeall=qstring-allocations
1188
1189#endif
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:62
DistanceUnit
Units of distance.
Definition qgis.h:5326
@ Meters
Meters.
Definition qgis.h:5327
QFlags< VectorFileWriterCapability > VectorFileWriterCapabilities
Capabilities supported by a QgsVectorFileWriter object.
Definition qgis.h:1150
WkbType
The WKB type describes the number of dimensions a geometry has.
Definition qgis.h:294
@ Unknown
Unknown.
Definition qgis.h:295
FeatureSymbologyExport
Options for exporting features considering their symbology.
Definition qgis.h:6069
@ NoSymbology
Export only data.
Definition qgis.h:6070
Provides common functionality for database based connections.
Represents a coordinate reference system (CRS).
Contains information about the context in which a coordinate transform is executed.
Handles coordinate transforms between two coordinate systems.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
Wrapper for iterator of features from vector data provider or vector layer.
Abstract base class for all 2D vector feature renderers.
An interface for objects which accept features via addFeature(s) methods.
QFlags< SinkFlag > SinkFlags
virtual bool addFeature(QgsFeature &feature, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())
Adds a single feature to the sink.
virtual QString lastError() const
Returns the most recent error encountered by the sink, e.g.
virtual bool addFeatures(QgsFeatureList &features, QgsFeatureSink::Flags flags=QgsFeatureSink::Flags())=0
Adds a list of features to the sink.
QFlags< Flag > Flags
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
Definition qgsfeature.h:60
Base class for feedback objects to be used for cancellation of something running in a worker thread.
Definition qgsfeedback.h:44
Encapsulate a field in an attribute table or data source.
Definition qgsfield.h:56
Container of fields for a vector layer.
Definition qgsfields.h:46
A geometry is the spatial representation of a feature.
A structured metadata store for a map layer.
A rectangle specified with double values.
Contains information about the context of a rendering operation.
A string settings entry.
Abstract base class for symbol layers.
BoolOption(const QString &docString, bool defaultValue)
Interface to convert raw field values to their user-friendly values.
virtual QVariant convert(int fieldIdxInLayer, const QVariant &value)
Convert the provided value, for field fieldIdxInLayer.
virtual QgsVectorFileWriter::FieldValueConverter * clone() const
Creates a clone of the FieldValueConverter.
virtual QgsField fieldDefinition(const QgsField &field)
Returns a possibly modified field definition.
IntOption(const QString &docString, int defaultValue)
Describes an available option for configuring file writing for a particular output format.
Option(const QString &docString, QgsVectorFileWriter::OptionType type)
QgsVectorFileWriter::OptionType type
virtual ~Option()=default
Options to pass to QgsVectorFileWriter::writeAsVectorFormat().
bool forceMulti
Sets to true to force creation of multipart geometries.
QgsCoordinateTransform ct
Transform to reproject exported geometries with, or invalid transform for no transformation.
QStringList attributesExportNames
Attributes export names.
QgsLayerMetadata layerMetadata
Layer metadata to save for the exported vector file.
QString layerName
Layer name. If let empty, it will be derived from the filename.
QgsRectangle filterExtent
If not empty, only features intersecting the extent will be saved.
bool includeConstraints
Set to true to transfer field constraints to the exported vector file.
const QgsAbstractDatabaseProviderConnection * sourceDatabaseProviderConnection
Source database provider connection, for field domains.
QgsVectorFileWriter::FieldValueConverter * fieldValueConverter
Field value converter.
QStringList layerOptions
List of OGR layer creation options.
Qgis::WkbType overrideGeometryType
Set to a valid geometry type to override the default geometry type for the layer.
bool includeZ
Sets to true to include z dimension in output. This option is only valid if overrideGeometryType is s...
Qgis::FeatureSymbologyExport symbologyExport
Symbology to export.
bool saveMetadata
Set to true to save layer metadata for the exported vector file.
QgsVectorFileWriter::ActionOnExistingFile actionOnExistingFile
Action on existing file.
QgsAttributeList attributes
Attributes to export (empty means all unless skipAttributeCreation is set).
bool onlySelectedFeatures
Write only selected features of layer.
QgsVectorFileWriter::FieldNameSource fieldNameSource
Source for exported field names.
bool skipAttributeCreation
Only write geometries.
bool setFieldDomains
Set to true to transfer field domains to the exported vector file.
QStringList datasourceOptions
List of OGR data source creation options.
QgsFeedback * feedback
Optional feedback object allowing cancellation of layer save.
An available option for configuring file writing for a particular output format, presenting a choice ...
SetOption(const QString &docString, const QStringList &values, const QString &defaultValue, bool allowNone=false)
StringOption(const QString &docString, const QString &defaultValue=QString())
A convenience class for writing vector layers to disk based formats (e.g.
static QgsVectorFileWriter::WriterError writeAsVectorFormatV3(QgsVectorLayer *layer, const QString &fileName, const QgsCoordinateTransformContext &transformContext, const QgsVectorFileWriter::SaveVectorOptions &options, QString *errorMessage=nullptr, QString *newFilename=nullptr, QString *newLayer=nullptr)
Writes a layer out to a vector file.
Qgis::FeatureSymbologyExport mSymbologyExport
EditionCapability
Edition capability flags.
@ CanAddNewFieldsToExistingLayer
Flag to indicate that new fields can be added to an existing layer. Imply CanAppendToExistingLayer.
@ CanAppendToExistingLayer
Flag to indicate that new features can be added to an existing layer.
@ CanAddNewLayer
Flag to indicate that a new layer can be added to the dataset.
@ CanDeleteLayer
Flag to indicate that an existing layer can be deleted.
static bool supportsFeatureStyles(const QString &driverName)
Returns true if the specified driverName supports feature styles.
Qgis::WkbType mWkbType
Geometry type which is being used.
double mSymbologyScale
Scale for symbology export (e.g. for symbols units in map units).
@ Canceled
Writing was interrupted by manual cancellation.
@ ErrSavingMetadata
Metadata saving failed.
gdal::ogr_datasource_unique_ptr mDS
static Q_DECL_DEPRECATED QgsVectorFileWriter::WriterError writeAsVectorFormatV2(QgsVectorLayer *layer, const QString &fileName, const QgsCoordinateTransformContext &transformContext, const QgsVectorFileWriter::SaveVectorOptions &options, QString *newFilename=nullptr, QString *newLayer=nullptr, QString *errorMessage=nullptr)
Writes a layer out to a vector file.
QFlags< EditionCapability > EditionCapabilities
Combination of CanAddNewLayer, CanAppendToExistingLayer, CanAddNewFieldsToExistingLayer or CanDeleteL...
double symbologyScale() const
Returns the reference scale for output.
static QString driverForExtension(const QString &extension)
Returns the OGR driver name for a specified file extension.
Qgis::VectorFileWriterCapabilities capabilities() const
Returns the capabilities supported by the writer.
friend class QgsVectorFileWriterTask
static QList< QgsVectorFileWriter::FilterFormatDetails > supportedFiltersAndFormats(VectorFormatOptions options=SortRecommended)
Returns a list or pairs, with format filter string as first element and OGR format key as second elem...
OGRSpatialReferenceH mOgrRef
static QgsVectorFileWriter * create(const QString &fileName, const QgsFields &fields, Qgis::WkbType geometryType, const QgsCoordinateReferenceSystem &srs, const QgsCoordinateTransformContext &transformContext, const QgsVectorFileWriter::SaveVectorOptions &options, QgsFeatureSink::SinkFlags sinkFlags=QgsFeatureSink::SinkFlags(), QString *newFilename=nullptr, QString *newLayer=nullptr)
Create a new vector file writer.
static const QgsSettingsEntryString * settingsDefaultEncoding
QString driver() const
Returns the GDAL (short) driver name associated with the output file.
Q_DECL_DEPRECATED QgsVectorFileWriter(const QString &vectorFileName, const QString &fileEncoding, const QgsFields &fields, Qgis::WkbType geometryType, const QgsCoordinateReferenceSystem &srs=QgsCoordinateReferenceSystem(), const QString &driverName="GPKG", const QStringList &datasourceOptions=QStringList(), const QStringList &layerOptions=QStringList(), QString *newFilename=nullptr, Qgis::FeatureSymbologyExport symbologyExport=Qgis::FeatureSymbologyExport::NoSymbology, QgsFeatureSink::SinkFlags sinkFlags=QgsFeatureSink::SinkFlags(), QString *newLayer=nullptr, const QgsCoordinateTransformContext &transformContext=QgsCoordinateTransformContext(), FieldNameSource fieldNameSource=Original)
Create a new vector file writer.
QMap< int, int > mAttrIdxToProviderIdx
Map attribute indices to OGR provider field indexes such as they are after the OGR provider has been ...
static Q_DECL_DEPRECATED QgsVectorFileWriter::WriterError writeAsVectorFormat(QgsVectorLayer *layer, const QString &fileName, const QString &fileEncoding, const QgsCoordinateReferenceSystem &destCRS=QgsCoordinateReferenceSystem(), const QString &driverName="GPKG", bool onlySelected=false, QString *errorMessage=nullptr, const QStringList &datasourceOptions=QStringList(), const QStringList &layerOptions=QStringList(), bool skipAttributeCreation=false, QString *newFilename=nullptr, Qgis::FeatureSymbologyExport symbologyExport=Qgis::FeatureSymbologyExport::NoSymbology, double symbologyScale=1.0, const QgsRectangle *filterExtent=nullptr, Qgis::WkbType overrideGeometryType=Qgis::WkbType::Unknown, bool forceMulti=false, bool includeZ=false, const QgsAttributeList &attributes=QgsAttributeList(), QgsVectorFileWriter::FieldValueConverter *fieldValueConverter=nullptr, QString *newLayer=nullptr)
Write contents of vector layer to an (OGR supported) vector format.
static QString filterForDriver(const QString &driverName)
Creates a filter for an OGR driver key.
QgsVectorFileWriter::WriterError hasError() const
Checks whether there were any errors in constructor.
VectorFormatOption
Options for sorting and filtering vector formats.
@ SupportsMultipleLayers
Filter to only formats which support multiple layers.
@ SkipNonSpatialFormats
Filter out any formats which do not have spatial support (e.g. those which cannot save geometries).
@ SortRecommended
Use recommended sort order, with extremely commonly used formats listed first.
static QList< QgsVectorFileWriter::DriverDetails > ogrDriverList(VectorFormatOptions options=SortRecommended)
Returns the driver list that can be used for dialogs.
QString driverLongName() const
Returns the GDAL long driver name associated with the output file.
QFlags< VectorFormatOption > VectorFormatOptions
WriterError mError
Contains error value if construction was not successful.
Qgis::FeatureSymbologyExport symbologyExport() const
Returns the feature symbology export handling for the writer.
FieldNameSource
Source for exported field names.
@ PreferAlias
Use the field alias as the exported field name, wherever one is set. Otherwise use the original field...
@ Original
Use original field names.
friend class TestQgsVectorFileWriter
bool mIncludeConstraints
Whether to transfer field constraints to output.
bool addFeatureWithStyle(QgsFeature &feature, QgsFeatureRenderer *renderer, Qgis::DistanceUnit outputUnit=Qgis::DistanceUnit::Meters)
Adds a feature to the currently opened data source, using the style from a specified renderer.
static QStringList supportedFormatExtensions(VectorFormatOptions options=SortRecommended)
Returns a list of file extensions for supported formats, e.g "shp", "gpkg".
bool mSetFieldDomains
Whether to set field domains to output.
static QString convertCodecNameForEncodingOption(const QString &codecName)
Converts codec name to string passed to ENCODING layer creation option of OGR Shapefile.
FieldValueConverter * mFieldValueConverter
Field value converter.
QString errorMessage() const
Retrieves error message.
QMap< int, int > mAttrIdxToOgrLayerIdx
Map attribute indices to OGR layer field indexes such as they are on the current mLayer instance.
void setSymbologyExport(Qgis::FeatureSymbologyExport symExport)
Sets the feature symbology export handling for the writer.
QMap< QgsSymbolLayer *, QString > mSymbolLayerTable
static QString fileFilterString(VectorFormatOptions options=SortRecommended)
Returns filter string that can be used for dialogs.
QMap< int, int > sourceFieldIndexToWriterFieldIndex() const
Returns the map of original source field index to output file field index.
ActionOnExistingFile
Enumeration to describe how to handle existing files.
@ CreateOrOverwriteLayer
Create or overwrite layer.
@ CreateOrOverwriteFile
Create or overwrite file.
@ AppendToLayerNoNewFields
Append features to existing layer, but do not create new fields.
@ AppendToLayerAddFields
Append features to existing layer, and create new fields if needed.
Represents a vector layer which manages a vector based dataset.
std::unique_ptr< std::remove_pointer< OGRDataSourceH >::type, OGRDataSourceDeleter > ogr_datasource_unique_ptr
Scoped OGR data source.
#define SIP_DEPRECATED
Definition qgis_sip.h:113
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:274
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_OUT
Definition qgis_sip.h:57
#define SIP_FACTORY
Definition qgis_sip.h:83
QList< QgsFeature > QgsFeatureList
QSet< QgsFeatureId > QgsFeatureIds
QList< int > QgsAttributeList
Definition qgsfield.h:30
Q_DECLARE_OPERATORS_FOR_FLAGS(QgsProjectionSelectionWidget::CrsOptions)
Details of available driver formats.
QString longName
Descriptive, user friendly name for the driver.
QString driverName
Unique driver name.
Details of available filters and formats.
QString filterString
Filter string for file picker dialogs.
QStringList globs
Matching glob patterns for format, e.g.
MetaData(const QString &longName, const QString &trLongName, const QString &glob, const QString &ext, const QMap< QString, QgsVectorFileWriter::Option * > &driverOptions, const QMap< QString, QgsVectorFileWriter::Option * > &layerOptions, const QString &compulsoryEncoding=QString())
QMap< QString, QgsVectorFileWriter::Option * > driverOptions
QMap< QString, QgsVectorFileWriter::Option * > layerOptions
QString compulsoryEncoding
Some formats require a compulsory encoding, typically UTF-8. If no compulsory encoding,...