mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-26 00:02:08 -05:00
- Output interpolated points when travel cost falls mid-way along an edge - Output all intermediate reachable points also - Make outputting upper/lower bound points optional, and non-default. Now by default we just output all definitely reachable points and the interpolated points along edges which correspond to the travel cost. This allows the output to be used to correctly generate service areas e.g. by concave/convex polygons and all reachable nodes will be included in the area. - Allow algorithm to optionally output a line layer (and make the point layer optional too, and default to just the line layer output) containing all reachable line segments (including interpolated segments of lines when the travel cost sits midway along that edge). This output is more easily understandably for users.
84 lines
2.9 KiB
Plaintext
84 lines
2.9 KiB
Plaintext
/************************************************************************
|
|
* This file has been generated automatically from *
|
|
* *
|
|
* src/analysis/network/qgsgraphanalyzer.h *
|
|
* *
|
|
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
|
************************************************************************/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class QgsGraphAnalyzer
|
|
{
|
|
%Docstring
|
|
This class performs graph analysis, e.g. calculates shortest path between two
|
|
points using different strategies with Dijkstra algorithm
|
|
%End
|
|
|
|
%TypeHeaderCode
|
|
#include "qgsgraphanalyzer.h"
|
|
%End
|
|
public:
|
|
|
|
static SIP_PYLIST dijkstra( const QgsGraph *source, int startVertexIdx, int criterionNum, QVector<int> *resultTree = 0, QVector<double> *resultCost = 0 );
|
|
%Docstring
|
|
Solve shortest path problem using Dijkstra algorithm
|
|
|
|
:param source: source graph
|
|
:param startVertexIdx: index of the start vertex
|
|
:param criterionNum: index of the optimization strategy
|
|
:param resultTree: array that represents shortest path tree. resultTree[ vertexIndex ] == inboundingArcIndex if vertex reachable, otherwise resultTree[ vertexIndex ] == -1.
|
|
Note that the startVertexIdx will also have a value of -1 and may need special handling by callers.
|
|
:param resultCost: array of the paths costs
|
|
%End
|
|
|
|
%MethodCode
|
|
QVector< int > treeResult;
|
|
QVector< double > costResult;
|
|
QgsGraphAnalyzer::dijkstra( a0, a1, a2, &treeResult, &costResult );
|
|
|
|
PyObject *l1 = PyList_New( treeResult.size() );
|
|
if ( l1 == NULL )
|
|
{
|
|
return NULL;
|
|
}
|
|
PyObject *l2 = PyList_New( costResult.size() );
|
|
if ( l2 == NULL )
|
|
{
|
|
return NULL;
|
|
}
|
|
int i;
|
|
for ( i = 0; i < costResult.size(); ++i )
|
|
{
|
|
PyObject *Int = PyLong_FromLong( treeResult[i] );
|
|
PyList_SET_ITEM( l1, i, Int );
|
|
PyObject *Float = PyFloat_FromDouble( costResult[i] );
|
|
PyList_SET_ITEM( l2, i, Float );
|
|
}
|
|
|
|
sipRes = PyTuple_New( 2 );
|
|
PyTuple_SET_ITEM( sipRes, 0, l1 );
|
|
PyTuple_SET_ITEM( sipRes, 1, l2 );
|
|
%End
|
|
|
|
static QgsGraph *shortestTree( const QgsGraph *source, int startVertexIdx, int criterionNum );
|
|
%Docstring
|
|
Returns shortest path tree with root-node in startVertexIdx
|
|
|
|
:param source: source graph
|
|
:param startVertexIdx: index of the start vertex
|
|
:param criterionNum: index of the optimization strategy
|
|
%End
|
|
};
|
|
|
|
/************************************************************************
|
|
* This file has been generated automatically from *
|
|
* *
|
|
* src/analysis/network/qgsgraphanalyzer.h *
|
|
* *
|
|
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
|
************************************************************************/
|