24using namespace Qt::StringLiterals;
28QString QgsAddXYFieldsAlgorithm::name()
const
30 return u
"addxyfields"_s;
33QString QgsAddXYFieldsAlgorithm::displayName()
const
35 return QObject::tr(
"Add X/Y fields to layer" );
38QString QgsAddXYFieldsAlgorithm::shortHelpString()
const
40 return QObject::tr(
"This algorithm adds X and Y (or latitude/longitude) fields to a point layer. The X/Y fields can be calculated in a different CRS to the layer (e.g. creating latitude/longitude fields for a layer in a project CRS)." );
43QString QgsAddXYFieldsAlgorithm::shortDescription()
const
45 return QObject::tr(
"Adds X and Y (or latitude/longitude) fields to a point layer." );
48QStringList QgsAddXYFieldsAlgorithm::tags()
const
50 return QObject::tr(
"add,create,latitude,longitude,columns,attributes" ).split(
',' );
53QString QgsAddXYFieldsAlgorithm::group()
const
55 return QObject::tr(
"Vector table" );
58QString QgsAddXYFieldsAlgorithm::groupId()
const
60 return u
"vectortable"_s;
63QString QgsAddXYFieldsAlgorithm::outputName()
const
65 return QObject::tr(
"Added fields" );
68QList<int> QgsAddXYFieldsAlgorithm::inputLayerTypes()
const
73QgsAddXYFieldsAlgorithm *QgsAddXYFieldsAlgorithm::createInstance()
const
75 return new QgsAddXYFieldsAlgorithm();
83void QgsAddXYFieldsAlgorithm::initParameters(
const QVariantMap &configuration )
85 mIsInPlace = configuration.value( u
"IN_PLACE"_s ).toBool();
102 mInPlaceXFieldIndex = inputFields.
lookupField( mInPlaceXField );
103 mInPlaceYFieldIndex = inputFields.
lookupField( mInPlaceYField );
108 const QString xFieldName = mPrefix +
'x';
109 const QString yFieldName = mPrefix +
'y';
112 newFields.
append(
QgsField( xFieldName, QMetaType::Type::Double, QString(), 20, 10 ) );
113 newFields.
append(
QgsField( yFieldName, QMetaType::Type::Double, QString(), 20, 10 ) );
120 mSourceCrs = inputCrs;
127 mPrefix = parameterAsString( parameters, u
"PREFIX"_s, context );
130 mInPlaceXField = parameterAsString( parameters, u
"FIELD_X"_s, context );
131 mInPlaceYField = parameterAsString( parameters, u
"FIELD_Y"_s, context );
134 mCrs = parameterAsCrs( parameters, u
"CRS"_s, context );
140 if ( mTransformNeedsInitialization )
143 mTransformNeedsInitialization =
false;
145 if ( mIsInPlace && mInPlaceXFieldIndex == -1 )
155 throw QgsProcessingException( QObject::tr(
"Multipoint features are not supported - please convert to single point features first." ) );
160 const QgsPointXY transformed = mTransform.transform( point );
166 feedback->
reportError( QObject::tr(
"Could not transform point to destination CRS" ) );
173 attributes << x << y;
177 attributes[mInPlaceXFieldIndex] = std::move( x );
178 attributes[mInPlaceYFieldIndex] = std::move( y );
184bool QgsAddXYFieldsAlgorithm::supportInPlaceEdit(
const QgsMapLayer *layer )
const
186 if (
const QgsVectorLayer *vl = qobject_cast<const QgsVectorLayer *>( layer ) )
@ VectorPoint
Vector point layers.
@ SkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
Represents a coordinate reference system (CRS).
Custom exception class for Coordinate Reference System related exceptions.
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.
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
Q_INVOKABLE int lookupField(const QString &fieldName) const
Looks up field's index from the field name.
QgsPointXY asPoint() const
Returns the contents of the geometry as a 2-dimensional point.
bool isMultipart() const
Returns true if WKB of the geometry is of WKBMulti* type.
Base class for all map layer types.
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 reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
A coordinate reference system parameter for processing algorithms.
A vector layer or feature source field parameter for processing algorithms.
A string parameter for processing algorithms.
static QgsFields combineFields(const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix=QString())
Combines two field lists, avoiding duplicate field names (in a case-insensitive manner).
Represents a vector layer which manages a vector based dataset.
QList< QgsFeature > QgsFeatureList