26 QString QgsSnapGeometriesAlgorithm::name()
 const 
   28   return QStringLiteral( 
"snapgeometries" );
 
   31 QString QgsSnapGeometriesAlgorithm::displayName()
 const 
   33   return QObject::tr( 
"Snap geometries to layer" );
 
   36 QString QgsSnapGeometriesAlgorithm::shortHelpString()
 const 
   38   return QObject::tr( 
"Snaps the geometries in a layer. Snapping can be done either to the geometries " 
   39                       "from another layer, or to geometries within the same layer." )
 
   40          + QStringLiteral( 
"\n\n" )
 
   41          + QObject::tr( 
"A tolerance is specified in layer units to control how close vertices need " 
   42                         "to be to the reference layer geometries before they are snapped." )
 
   43          + QStringLiteral( 
"\n\n" )
 
   44          + QObject::tr( 
"Snapping occurs to both nodes and edges. Depending on the snapping behavior, " 
   45                         "either nodes or edges will be preferred." )
 
   46          + QStringLiteral( 
"\n\n" )
 
   47          + QObject::tr( 
"Vertices will be inserted or removed as required to make the geometries match " 
   48                         "the reference geometries." );
 
   51 QStringList QgsSnapGeometriesAlgorithm::tags()
 const 
   53   return QObject::tr( 
"geometry,snap,tolerance" ).split( 
',' );
 
   56 QString QgsSnapGeometriesAlgorithm::group()
 const 
   58   return QObject::tr( 
"Vector geometry" );
 
   61 QString QgsSnapGeometriesAlgorithm::groupId()
 const 
   63   return QStringLiteral( 
"vectorgeometry" );
 
   66 QgsProcessingAlgorithm::Flags QgsSnapGeometriesAlgorithm::flags()
 const 
   73 bool QgsSnapGeometriesAlgorithm::supportInPlaceEdit( 
const QgsMapLayer *l )
 const 
   75   const QgsVectorLayer *layer = qobject_cast< const QgsVectorLayer * >( l );
 
   82 void QgsSnapGeometriesAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   89                 10.0, QStringLiteral( 
"INPUT" ), 
false, 0.00000001 ) );
 
   91   QStringList options = QStringList()
 
   92                         << QObject::tr( 
"Prefer aligning nodes, insert extra vertices where required" )
 
   93                         << QObject::tr( 
"Prefer closest point, insert extra vertices where required" )
 
   94                         << QObject::tr( 
"Prefer aligning nodes, don't insert new vertices" )
 
   95                         << QObject::tr( 
"Prefer closest point, don't insert new vertices" )
 
   96                         << QObject::tr( 
"Move end points only, prefer aligning nodes" )
 
   97                         << QObject::tr( 
"Move end points only, prefer closest point" )
 
   98                         << QObject::tr( 
"Snap end points to end points only" )
 
   99                         << QObject::tr( 
"Snap to anchor nodes (single layer only)" );
 
  100   addParameter( 
new QgsProcessingParameterEnum( QStringLiteral( 
"BEHAVIOR" ), QObject::tr( 
"Behavior" ), options, 
false, QVariantList() << 0 ) );
 
  105 QgsSnapGeometriesAlgorithm *QgsSnapGeometriesAlgorithm::createInstance()
 const 
  107   return new QgsSnapGeometriesAlgorithm();
 
  112   std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
  116   std::unique_ptr< QgsProcessingFeatureSource > referenceSource( parameterAsSource( parameters, QStringLiteral( 
"REFERENCE_LAYER" ), context ) );
 
  117   if ( !referenceSource )
 
  120   double tolerance = parameterAsDouble( parameters, QStringLiteral( 
"TOLERANCE" ), context );
 
  124   std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( 
"OUTPUT" ), context, dest, source->fields(), source->wkbType(), source->sourceCrs() ) );
 
  128   double step = source->featureCount() > 0 ? 100.0 / source->featureCount() : 1;
 
  131   if ( parameters.value( QStringLiteral( 
"INPUT" ) ) != parameters.value( QStringLiteral( 
"REFERENCE_LAYER" ) ) )
 
  134       throw QgsProcessingException( QObject::tr( 
"This mode applies when the input and reference layer are the same." ) );
 
  137     long long processed = 0;
 
  147         outFeature.setGeometry( snapper.snapGeometry( f.
geometry(), tolerance, mode ) );
 
  152         sink->addFeature( f );
 
  158   else if ( mode == 7 )
 
  162     feedback->
pushInfo( QObject::tr( 
"Snapped %1 geometries." ).arg( modified ) );
 
  168     long long processed = 0;
 
  178         outFeature.setGeometry( snapper.snapFeature( f ) );
 
  183         sink->addFeature( f );
 
  191   outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
Wrapper for iterator of features from vector data provider or vector layer.
bool nextFeature(QgsFeature &f)
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
bool hasGeometry() const
Returns true if the feature has an associated 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.
static int run(const QgsFeatureSource &source, QgsFeatureSink &sink, double thresh, QgsFeedback *feedback)
Run the algorithm on given source and output results to the sink, using threshold value in the source...
QgsGeometrySnapper allows a geometry to be snapped to the geometries within a different reference lay...
QgsInternalGeometrySnapper allows a set of geometries to be snapped to each other.
Base class for all map layer types.
virtual Flags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
@ FlagSupportsInPlaceEdits
Algorithm supports in-place editing.
Contains information about the context in which a processing algorithm is executed.
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.
A double numeric parameter for distance values.
An enum based parameter for processing algorithms, allowing for selection from predefined values.
A feature sink output for processing algorithms.
An input feature source (such as vector layers) parameter for processing algorithms.
@ TypeVectorLine
Vector line layers.
@ TypeVectorPolygon
Vector polygon layers.
@ TypeVectorPoint
Vector point layers.
@ TypeVectorAnyGeometry
Any vector layer with geometry.
Represents a vector layer which manages a vector based data sets.
bool isSpatial() const FINAL
Returns true if this is a geometry layer and false in case of NoGeometry (table only) or UnknownGeome...