26QString QgsShortestLineAlgorithm::name()
 const 
   28  return QStringLiteral( 
"shortestline" );
 
   31QString QgsShortestLineAlgorithm::displayName()
 const 
   33  return QObject::tr( 
"Shortest line between features" );
 
   36QStringList QgsShortestLineAlgorithm::tags()
 const 
   38  return QObject::tr( 
"distance,shortest,minimum,nearest,closest,proximity" ).split( 
',' );
 
   41QString QgsShortestLineAlgorithm::group()
 const 
   43  return QObject::tr( 
"Vector analysis" );
 
   46QString QgsShortestLineAlgorithm::groupId()
 const 
   48  return QStringLiteral( 
"vectoranalysis" );
 
   51QString QgsShortestLineAlgorithm::shortDescription()
 const 
   53  return QObject::tr( 
"Calculates the shortest lines between features in source and destination layers." );
 
   56QString QgsShortestLineAlgorithm::shortHelpString()
 const 
   58  return QObject::tr( 
"This algorithm creates a line layer as the " 
   59                      "shortest line between the source and the destination layer. " 
   60                      "By default only the first nearest feature of the " 
   61                      "destination layer is taken into account. " 
   62                      "The n-nearest neighboring features number can be specified.\n\n" 
   63                      "If a maximum distance is specified, then only " 
   64                      "features which are closer than this distance will " 
   65                      "be considered.\n\nThe output features will contain all the " 
   66                      "source layer attributes, all the attributes from the n-nearest " 
   67                      "feature and the additional field of the distance.\n\n" 
   68                      "This algorithm uses purely Cartesian calculations for distance, " 
   69                      "and does not consider geodetic or ellipsoid properties when " 
   70                      "determining feature proximity. The measurement and output coordinate " 
   71                      "system is based on the coordinate system of the source layer." 
   75QgsShortestLineAlgorithm *QgsShortestLineAlgorithm::createInstance()
 const 
   77  return new QgsShortestLineAlgorithm();
 
   80void QgsShortestLineAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   84  addParameter( 
new QgsProcessingParameterEnum( QStringLiteral( 
"METHOD" ), QObject::tr( 
"Method" ), QStringList() << 
"Distance to Nearest Point on feature" << 
"Distance to Feature Centroid", 
false, 0 ) );
 
   86  addParameter( 
new QgsProcessingParameterDistance( QStringLiteral( 
"DISTANCE" ), QObject::tr( 
"Maximum distance" ), QVariant(), QString( 
"SOURCE" ), 
true ) );
 
   92  mSource.reset( parameterAsSource( parameters, QStringLiteral( 
"SOURCE" ), context ) );
 
   96  mDestination.reset( parameterAsSource( parameters, QStringLiteral( 
"DESTINATION" ), context ) );
 
  100  mMethod = parameterAsInt( parameters, QStringLiteral( 
"METHOD" ), context );
 
  102  mKNeighbors = parameterAsInt( parameters, QStringLiteral( 
"NEIGHBORS" ), context );
 
  104  mMaxDistance = parameterAsDouble( parameters, QStringLiteral( 
"DISTANCE" ), context ); 
 
  111  if ( mKNeighbors > mDestination->featureCount() )
 
  112    mKNeighbors = mDestination->featureCount();
 
  117  newFields.
append( 
QgsField( QStringLiteral( 
"distance" ), QMetaType::Type::Double ) );
 
  121  std::unique_ptr<QgsFeatureSink> sink( parameterAsSink( parameters, QStringLiteral( 
"OUTPUT" ), context, dest, fields, 
Qgis::WkbType::MultiLineString, mSource->sourceCrs() ) );
 
  126  QHash<QgsFeatureId, QgsAttributes> destinationAttributeCache;
 
  127  double step = mDestination->featureCount() > 0 ? 50.0 / mDestination->featureCount() : 1;
 
  131    if ( feedback-> isCanceled() )
 
  136    destinationAttributeCache.insert( f.
id(), f.
attributes() );
 
  140  step = mSource->featureCount() > 0 ? 50.0 / mSource->featureCount() : 1;
 
  147  while ( sourceIterator.
nextFeature( sourceFeature ) )
 
  153    QgsFeatureIds nearestIds = qgis::listToSet( idx.nearestNeighbor( sourceGeom, mKNeighbors, mMaxDistance ) );
 
  160        destinationGeom = idx.geometry( 
id ).
centroid();
 
  171        throw QgsProcessingException( QObject::tr( 
"An error occurred while calculating shortest line length" ) );
 
  176      attrs << destinationAttributeCache.value( 
id ) << dist;
 
  191  outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
@ VectorAnyGeometry
Any vector layer with geometry.
 
@ VectorLine
Vector line layers.
 
@ MultiLineString
MultiLineString.
 
Custom exception class for Coordinate Reference System related exceptions.
 
A general purpose distance and area calculator, capable of performing ellipsoid based calculations.
 
double measureLength(const QgsGeometry &geometry) const
Measures the length of a geometry.
 
void setSourceCrs(const QgsCoordinateReferenceSystem &crs, const QgsCoordinateTransformContext &context)
Sets source spatial reference system crs.
 
Wrapper for iterator of features from vector data provider or vector layer.
 
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
 
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...
 
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.
 
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
 
bool isCanceled() const
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.
 
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
 
A geometry is the spatial representation of a feature.
 
QgsGeometry centroid() const
Returns the center of mass of a geometry.
 
QgsGeometry shortestLine(const QgsGeometry &other) const
Returns the shortest line joining this geometry to another geometry.
 
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.
 
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.
 
A numeric 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).
 
A spatial index for QgsFeature objects.
 
@ FlagStoreFeatureGeometries
Indicates that the spatial index should also store feature geometries. This requires more memory,...
 
QSet< QgsFeatureId > QgsFeatureIds
 
qint64 QgsFeatureId
64 bit feature ids negative numbers are used for uncommitted/newly added features