26 QString QgsShortestPathPointToLayerAlgorithm::name()
 const    28   return QStringLiteral( 
"shortestpathpointtolayer" );
    31 QString QgsShortestPathPointToLayerAlgorithm::displayName()
 const    33   return QObject::tr( 
"Shortest path (point to layer)" );
    36 QStringList QgsShortestPathPointToLayerAlgorithm::tags()
 const    38   return QObject::tr( 
"network,path,shortest,fastest" ).split( 
',' );
    41 QString QgsShortestPathPointToLayerAlgorithm::shortHelpString()
 const    43   return QObject::tr( 
"This algorithm computes optimal (shortest or fastest) route between given start point and multiple end points defined by point vector layer." );
    46 QgsShortestPathPointToLayerAlgorithm *QgsShortestPathPointToLayerAlgorithm::createInstance()
 const    48   return new QgsShortestPathPointToLayerAlgorithm();
    51 void QgsShortestPathPointToLayerAlgorithm::initAlgorithm( 
const QVariantMap & )
    62   loadCommonParams( parameters, context, feedback );
    64   QgsPointXY startPoint = parameterAsPoint( parameters, QStringLiteral( 
"START_POINT" ), context, mNetwork->sourceCrs() );
    66   std::unique_ptr< QgsFeatureSource > endPoints( parameterAsSource( parameters, QStringLiteral( 
"END_POINTS" ), context ) );
    71   fields.
append( 
QgsField( QStringLiteral( 
"start" ), QVariant::String ) );
    72   fields.
append( 
QgsField( QStringLiteral( 
"end" ), QVariant::String ) );
    73   fields.
append( 
QgsField( QStringLiteral( 
"cost" ), QVariant::Double ) );
    80   QVector< QgsPointXY > points;
    81   points.push_front( startPoint );
    82   QHash< int, QgsAttributes > sourceAttributes;
    83   loadPoints( endPoints.get(), points, sourceAttributes, context, feedback );
    85   feedback->
pushInfo( QObject::tr( 
"Building graph…" ) );
    86   QVector< QgsPointXY > snappedPoints;
    87   mDirector->makeGraph( mBuilder.get(), points, snappedPoints, feedback );
    89   feedback->
pushInfo( QObject::tr( 
"Calculating shortest paths…" ) );
    91   int idxStart = graph->
findVertex( snappedPoints[0] );
    95   QVector< double > costs;
    98   QVector<QgsPointXY> route;
   105   int step =  points.size() > 0 ? 100.0 / points.size() : 1;
   106   for ( 
int i = 1; i < points.size(); i++ )
   113     idxEnd = graph->
findVertex( snappedPoints[i] );
   114     if ( tree.at( idxEnd ) == -1 )
   116       feedback->
reportError( QObject::tr( 
"There is no route from start point (%1) to end point (%2)." )
   118                                    points[i].toString() ) );
   120       attributes = sourceAttributes.value( i );
   121       attributes.append( QVariant() );
   122       attributes.append( points[i].toString() );
   129     route.push_front( graph->
vertex( idxEnd ).
point() );
   130     cost = costs.at( idxEnd );
   131     while ( idxEnd != idxStart )
   133       idxEnd = graph->
edge( tree.at( idxEnd ) ).fromVertex();
   134       route.push_front( graph->
vertex( idxEnd ).
point() );
   140     attributes = sourceAttributes.value( i );
   141     attributes.append( startPoint.
toString() );
   142     attributes.append( points[i].toString() );
   143     attributes.append( cost / mMultiplier );
   152   outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 const QgsGraphEdge & edge(int idx) const
Returns edge at given index. 
 
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
 
static QgsGeometry fromPolylineXY(const QgsPolylineXY &polyline)
Creates a new LineString geometry from a list of QgsPointXY points. 
 
Base class for providing feedback from a processing algorithm. 
 
void setFields(const QgsFields &fields, bool initAttributes=false)
Assign a field map with the feature to allow attribute access by attribute name. 
 
A class to represent a 2D point. 
 
void setProgress(double progress)
Sets the current progress for the feedback object. 
 
Container of fields for a vector layer. 
 
QgsPointXY point() const
Returns point associated with graph vertex. 
 
A geometry is the spatial representation of a feature. 
 
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes. 
 
QString toString(int precision=-1) const
Returns a string representation of the point (x, y) with a preset precision. 
 
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
 
A feature sink output for processing algorithms. 
 
This flag indicates, that a primary key field cannot be guaranteed to be unique and the sink should i...
 
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm. 
 
Custom exception class for processing related exceptions. 
 
bool append(const QgsField &field, FieldOrigin origin=OriginProvider, int originIndex=-1)
Appends a field. The field must have unique name, otherwise it is rejected (returns false) ...
 
int findVertex(const QgsPointXY &pt) const
Find vertex by associated point. 
 
Encapsulate a field in an attribute table or data source. 
 
Mathematical graph representation. 
 
void clearGeometry()
Removes any geometry associated with the feature. 
 
A point parameter for processing algorithms. 
 
const QgsGraphVertex & vertex(int idx) const
Returns vertex at given index. 
 
bool isCanceled() const
Tells whether the operation has been canceled already. 
 
An input feature source (such as vector layers) parameter for processing algorithms. 
 
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry. 
 
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing. 
 
Contains information about the context in which a processing algorithm is executed. 
 
static void dijkstra(const QgsGraph *source, int startVertexIdx, int criterionNum, QVector< int > *resultTree=nullptr, QVector< double > *resultCost=nullptr)
Solve shortest path problem using Dijkstra algorithm.