23 QString QgsMergeVectorAlgorithm::name()
 const 
   25   return QStringLiteral( 
"mergevectorlayers" );
 
   28 QString QgsMergeVectorAlgorithm::displayName()
 const 
   30   return QObject::tr( 
"Merge vector layers" );
 
   33 QStringList QgsMergeVectorAlgorithm::tags()
 const 
   35   return QObject::tr( 
"vector,layers,collect,merge,combine" ).split( 
',' );
 
   38 QString QgsMergeVectorAlgorithm::group()
 const 
   40   return QObject::tr( 
"Vector general" );
 
   43 QString QgsMergeVectorAlgorithm::groupId()
 const 
   45   return QStringLiteral( 
"vectorgeneral" );
 
   48 void QgsMergeVectorAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   51   addParameter( 
new QgsProcessingParameterCrs( QStringLiteral( 
"CRS" ), QObject::tr( 
"Destination CRS" ), QVariant(), 
true ) );
 
   55 QString QgsMergeVectorAlgorithm::shortDescription()
 const 
   57   return QObject::tr( 
"Combines multiple vector layers of the same geometry type into a single one." );
 
   60 QString QgsMergeVectorAlgorithm::shortHelpString()
 const 
   62   return QObject::tr( 
"This algorithm combines multiple vector layers of the same geometry type into a single one.\n\n" 
   63                       "The attribute table of the resulting layer will contain the fields from all input layers. " 
   64                       "If fields with the same name but different types are found then the exported field will be automatically converted into a string type field. " 
   65                       "New fields storing the original layer name and source are also added.\n\n" 
   66                       "If any input layers contain Z or M values, then the output layer will also contain these values. Similarly, " 
   67                       "if any of the input layers are multi-part, the output layer will also be a multi-part layer.\n\n" 
   68                       "Optionally, the destination coordinate reference system (CRS) for the merged layer can be set. If it is not set, the CRS will be " 
   69                       "taken from the first input layer. All layers will all be reprojected to match this CRS." );
 
   72 QgsMergeVectorAlgorithm *QgsMergeVectorAlgorithm::createInstance()
 const 
   74   return new QgsMergeVectorAlgorithm();
 
   79   const QList< QgsMapLayer * > layers = parameterAsLayerList( parameters, QStringLiteral( 
"LAYERS" ), context );
 
   82   long totalFeatureCount = 0;
 
  102       feedback->
pushDebugInfo( QObject::tr( 
"Error retrieving map layer." ) );
 
  122         throw QgsProcessingException( QObject::tr( 
"All layers must have same geometry type! Encountered a %1 layer when expecting a %2 layer." )
 
  154       for ( 
QgsField &destField : outputFields )
 
  156         if ( destField.name().compare( sourceField.name(), Qt::CaseInsensitive ) == 0 )
 
  159           if ( destField.type() != sourceField.type() )
 
  161             feedback->
pushWarning( QObject::tr( 
"%1 field in layer %2 has different data type than the destination layer (%3 instead of %4). " 
  162                                                 "%1 field will be converted to string type." )
 
  163                                    .arg( sourceField.name(), vl->
name(), sourceField.typeName(), destField.typeName() ) );
 
  164             destField.setType( QVariant::String );
 
  165             destField.setSubType( QVariant::Invalid );
 
  166             destField.setLength( 0 );
 
  167             destField.setPrecision( 0 );
 
  174         outputFields.append( sourceField );
 
  178   bool addLayerField = 
false;
 
  179   if ( outputFields.lookupField( QStringLiteral( 
"layer" ) ) < 0 )
 
  181     outputFields.append( 
QgsField( QStringLiteral( 
"layer" ), QVariant::String, QString() ) );
 
  182     addLayerField = 
true;
 
  184   bool addPathField = 
false;
 
  185   if ( outputFields.lookupField( QStringLiteral( 
"path" ) ) < 0 )
 
  187     outputFields.append( 
QgsField( QStringLiteral( 
"path" ), QVariant::String, QString() ) );
 
  199   const double step = totalFeatureCount > 0 ? 100.0 / totalFeatureCount : 1;
 
  212     feedback->
pushInfo( QObject::tr( 
"Packaging layer %1/%2: %3" ).arg( layerNumber ).arg( layers.count() ).arg( layer->name() ) );
 
  224         bool changed = 
false;
 
  247       for ( 
const QgsField &destField : outputFields )
 
  249         if ( addLayerField && destField.name() == QLatin1String( 
"layer" ) )
 
  251           destAttributes.append( layer->name() );
 
  254         else if ( addPathField && destField.name() == QLatin1String( 
"path" ) )
 
  256           destAttributes.append( layer->publicSource() );
 
  260         QVariant destAttribute;
 
  262         if ( sourceIndex >= 0 )
 
  264           destAttribute = f.
attributes().at( sourceIndex );
 
  266         destAttributes.append( destAttribute );
 
  281   outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
virtual bool addZValue(double zValue=0)=0
Adds a z-dimension to the geometry, initialized to a preset value.
 
bool is3D() const SIP_HOLDGIL
Returns true if the geometry is 3D and contains a z-value.
 
virtual bool addMValue(double mValue=0)=0
Adds a measure to the geometry, initialized to a preset value.
 
bool isMeasure() const SIP_HOLDGIL
Returns true if the geometry contains m values.
 
This class represents a coordinate reference system (CRS).
 
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
 
Wrapper for iterator of features from vector data provider or vector layer.
 
bool nextFeature(QgsFeature &f)
 
This class wraps a request for features to a vector layer (or directly its vector data provider).
 
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
 
@ RegeneratePrimaryKey
This flag indicates, that a primary key field cannot be guaranteed to be unique and the sink should i...
 
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
 
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
 
bool hasGeometry() const
Returns true if the feature has an associated geometry.
 
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
 
bool isCanceled() const SIP_HOLDGIL
Tells whether the operation has been canceled already.
 
void setProgress(double progress)
Sets the current progress for the feedback object.
 
Encapsulate a field in an attribute table or data source.
 
Container of fields for a vector layer.
 
int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
 
A geometry is the spatial representation of a feature.
 
const QgsAbstractGeometry * constGet() const SIP_HOLDGIL
Returns a non-modifiable (const) reference to the underlying abstract geometry primitive.
 
QgsAbstractGeometry * get()
Returns a modifiable (non-const) reference to the underlying abstract geometry primitive.
 
bool isMultipart() const SIP_HOLDGIL
Returns true if WKB of the geometry is of WKBMulti* type.
 
bool convertToMultiType()
Converts single type geometry into multitype geometry e.g.
 
Base class for all map layer types.
 
QgsCoordinateReferenceSystem crs
 
Contains information about the context in which a processing algorithm is executed.
 
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
 
Custom exception class for processing related exceptions.
 
Base class for providing feedback from a processing algorithm.
 
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
 
virtual void pushWarning(const QString &warning)
Pushes a warning informational message from the algorithm.
 
virtual void pushDebugInfo(const QString &info)
Pushes an informational message containing debugging helpers from the algorithm.
 
A coordinate reference system parameter for processing algorithms.
 
A feature sink output for processing algorithms.
 
A parameter for processing algorithms which accepts multiple map layers.
 
@ TypeVector
Tables (i.e. vector layers with or without geometry). When used for a sink this indicates the sink ha...
 
Represents a vector layer which manages a vector based data sets.
 
Q_INVOKABLE QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
 
long long featureCount(const QString &legendKey) const
Number of features rendered with specified legend key.
 
QgsFeatureIterator getFeatures(const QgsFeatureRequest &request=QgsFeatureRequest()) const FINAL
Queries the layer for features specified in request.
 
QgsFields fields() const FINAL
Returns the list of fields of this layer.
 
static GeometryType geometryType(Type type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
 
static QString geometryDisplayString(GeometryType type) SIP_HOLDGIL
Returns a display string for a geometry type.
 
static bool isMultiType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a multi type.
 
static bool hasM(Type type) SIP_HOLDGIL
Tests whether a WKB type contains m values.
 
Type
The WKB type describes the number of dimensions a geometry has.
 
static QString displayString(Type type) SIP_HOLDGIL
Returns a non-translated display string type for a WKB type, e.g., the geometry name used in WKT geom...
 
static Type multiType(Type type) SIP_HOLDGIL
Returns the multi type for a WKB type.
 
static Type addZ(Type type) SIP_HOLDGIL
Adds the z dimension to a WKB type and returns the new type.
 
static bool hasZ(Type type) SIP_HOLDGIL
Tests whether a WKB type contains the z-dimension.
 
static Type addM(Type type) SIP_HOLDGIL
Adds the m dimension to a WKB type and returns the new type.
 
@ VectorLayer
Vector layer.
 
const QgsCoordinateReferenceSystem & outputCrs