25 QString QgsPackageAlgorithm::name()
const 27 return QStringLiteral(
"package" );
30 QString QgsPackageAlgorithm::displayName()
const 32 return QObject::tr(
"Package layers" );
35 QStringList QgsPackageAlgorithm::tags()
const 37 return QObject::tr(
"geopackage,collect,merge,combine" ).split(
',' );
40 QString QgsPackageAlgorithm::group()
const 42 return QObject::tr(
"Database" );
45 QString QgsPackageAlgorithm::groupId()
const 47 return QStringLiteral(
"database" );
50 void QgsPackageAlgorithm::initAlgorithm(
const QVariantMap & )
58 QString QgsPackageAlgorithm::shortHelpString()
const 60 return QObject::tr(
"This algorithm collects a number of existing layers and packages them together into a single GeoPackage database." );
63 QgsPackageAlgorithm *QgsPackageAlgorithm::createInstance()
const 65 return new QgsPackageAlgorithm();
70 bool overwrite = parameterAsBool( parameters, QStringLiteral(
"OVERWRITE" ), context );
71 QString packagePath = parameterAsString( parameters, QStringLiteral(
"OUTPUT" ), context );
72 if ( packagePath.isEmpty() )
76 if ( overwrite && QFile::exists( packagePath ) )
78 feedback->
pushInfo( QObject::tr(
"Removing existing file '%1'" ).arg( packagePath ) );
79 if ( !QFile( packagePath ).
remove() )
85 OGRSFDriverH hGpkgDriver = OGRGetDriverByName(
"GPKG" );
93 throw QgsProcessingException( QObject::tr(
"Creation of database failed (OGR error: %1)" ).arg( QString::fromUtf8( CPLGetLastErrorMsg() ) ) );
96 const QList< QgsMapLayer * > layers = parameterAsLayerList( parameters, QStringLiteral(
"LAYERS" ), context );
100 QStringList outputLayers;
110 feedback->
pushInfo( QObject::tr(
"Packaging layer %1/%2: %3" ).arg( i ).arg( layers.count() ).arg( layer ? layer->name() : QString() ) );
115 feedback->
pushDebugInfo( QObject::tr(
"Error retrieving map layer." ) );
120 switch ( layer->type() )
124 if ( !packageVectorLayer( qobject_cast< QgsVectorLayer * >( layer ), packagePath,
125 context, &multiStepFeedback ) )
128 outputLayers.append( QStringLiteral(
"%1|layername=%2" ).arg( packagePath, layer->name() ) );
135 feedback->
pushDebugInfo( QObject::tr(
"Raster layers are not currently supported." ) );
142 feedback->
pushDebugInfo( QObject::tr(
"Packaging plugin layers is not supported." ) );
148 feedback->
pushDebugInfo( QObject::tr(
"Packaging mesh layers is not supported." ) );
158 outputs.insert( QStringLiteral(
"OUTPUT" ), packagePath );
159 outputs.insert( QStringLiteral(
"OUTPUT_LAYERS" ), outputLayers );
167 options.
driverName = QStringLiteral(
"GPKG" );
176 feedback->
pushDebugInfo( QObject::tr(
"Packaging layer failed: %1" ).arg( error ) );
A boolean parameter for processing algorithms.
A parameter for processing algorithms which accepts multiple map layers.
QgsVectorFileWriter::ActionOnExistingFile actionOnExistingFile
Action on existing file.
Base class for all map layer types.
Base class for providing feedback from a processing algorithm.
Processing feedback object for multi-step operations.
void setCurrentStep(int step)
Sets the step which is being executed.
Options to pass to writeAsVectorFormat()
Custom exception class for processing related exceptions.
Create or overwrite layer.
QString driverName
OGR driver to use.
A generic file based destination parameter, for specifying the destination path for a file (non-map l...
virtual void pushDebugInfo(const QString &info)
Pushes an informational message containing debugging helpers from the algorithm.
A multi-layer output for processing algorithms which create map layers, when the number and nature of...
QString fileEncoding
Encoding to use.
bool isCanceled() const
Tells whether the operation has been canceled already.
QString defaultEncoding() const
Returns the default encoding to use for newly created files.
static 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, QgsVectorFileWriter::SymbologyExport symbologyExport=QgsVectorFileWriter::NoSymbology, double symbologyScale=1.0, const QgsRectangle *filterExtent=nullptr, QgsWkbTypes::Type overrideGeometryType=QgsWkbTypes::Unknown, bool forceMulti=false, bool includeZ=false, const QgsAttributeList &attributes=QgsAttributeList(), QgsVectorFileWriter::FieldValueConverter *fieldValueConverter=nullptr)
Write contents of vector layer to an (OGR supported) vector formt.
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
QString layerName
Layer name. If let empty, it will be derived from the filename.
std::unique_ptr< std::remove_pointer< OGRDataSourceH >::type, OGRDataSourceDeleter > ogr_datasource_unique_ptr
Scoped OGR data source.
QgsFeedback * feedback
Optional feedback object allowing cancelation of layer save.
Represents a vector layer which manages a vector based data sets.
Contains information about the context in which a processing algorithm is executed.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.