30 QString QgsNetworkAnalysisAlgorithmBase::group()
const
32 return QObject::tr(
"Network analysis" );
35 QString QgsNetworkAnalysisAlgorithmBase::groupId()
const
37 return QStringLiteral(
"networkanalysis" );
40 QgsProcessingAlgorithm::Flags QgsNetworkAnalysisAlgorithmBase::flags()
const
46 void QgsNetworkAnalysisAlgorithmBase::addCommonParams()
49 addParameter(
new QgsProcessingParameterEnum( QStringLiteral(
"STRATEGY" ), QObject::tr(
"Path type to calculate" ), QStringList() << QObject::tr(
"Shortest" ) << QObject::tr(
"Fastest" ),
false, 0 ) );
51 std::unique_ptr< QgsProcessingParameterField > directionField = std::make_unique< QgsProcessingParameterField >( QStringLiteral(
"DIRECTION_FIELD" ),
54 addParameter( directionField.release() );
56 std::unique_ptr< QgsProcessingParameterString > forwardValue = std::make_unique< QgsProcessingParameterString >( QStringLiteral(
"VALUE_FORWARD" ),
57 QObject::tr(
"Value for forward direction" ), QVariant(),
false,
true );
59 addParameter( forwardValue.release() );
61 std::unique_ptr< QgsProcessingParameterString > backwardValue = std::make_unique< QgsProcessingParameterString >( QStringLiteral(
"VALUE_BACKWARD" ),
62 QObject::tr(
"Value for backward direction" ), QVariant(),
false,
true );
64 addParameter( backwardValue.release() );
66 std::unique_ptr< QgsProcessingParameterString > bothValue = std::make_unique< QgsProcessingParameterString >( QStringLiteral(
"VALUE_BOTH" ),
67 QObject::tr(
"Value for both directions" ), QVariant(),
false,
true );
69 addParameter( bothValue.release() );
71 std::unique_ptr< QgsProcessingParameterEnum > directionValue = std::make_unique< QgsProcessingParameterEnum >( QStringLiteral(
"DEFAULT_DIRECTION" ),
72 QObject::tr(
"Default direction" ), QStringList() << QObject::tr(
"Forward direction" ) << QObject::tr(
"Backward direction" ) << QObject::tr(
"Both directions" ),
false, 2 );
74 addParameter( directionValue.release() );
76 std::unique_ptr< QgsProcessingParameterField > speedField = std::make_unique< QgsProcessingParameterField >( QStringLiteral(
"SPEED_FIELD" ),
79 addParameter( speedField.release() );
81 std::unique_ptr< QgsProcessingParameterNumber > speed = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral(
"DEFAULT_SPEED" ), QObject::tr(
"Default speed (km/h)" ),
QgsProcessingParameterNumber::Double, 50,
false, 0 );
83 addParameter( speed.release() );
85 std::unique_ptr< QgsProcessingParameterNumber > tolerance = std::make_unique < QgsProcessingParameterDistance >( QStringLiteral(
"TOLERANCE" ), QObject::tr(
"Topology tolerance" ), 0, QStringLiteral(
"INPUT" ),
false, 0 );
87 addParameter( tolerance.release() );
94 mNetwork.reset( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
98 const int strategy = parameterAsInt( parameters, QStringLiteral(
"STRATEGY" ), context );
99 const QString directionFieldName = parameterAsString( parameters, QStringLiteral(
"DIRECTION_FIELD" ), context );
100 const QString forwardValue = parameterAsString( parameters, QStringLiteral(
"VALUE_FORWARD" ), context );
101 const QString backwardValue = parameterAsString( parameters, QStringLiteral(
"VALUE_BACKWARD" ), context );
102 const QString bothValue = parameterAsString( parameters, QStringLiteral(
"VALUE_BOTH" ), context );
104 const QString speedFieldName = parameterAsString( parameters, QStringLiteral(
"SPEED_FIELD" ), context );
105 const double defaultSpeed = parameterAsDouble( parameters, QStringLiteral(
"DEFAULT_SPEED" ), context );
106 const double tolerance = parameterAsDouble( parameters, QStringLiteral(
"TOLERANCE" ), context );
108 int directionField = -1;
109 if ( !directionFieldName.isEmpty() )
111 directionField = mNetwork->fields().lookupField( directionFieldName );
115 if ( !speedFieldName.isEmpty() )
117 speedField = mNetwork->fields().lookupField( speedFieldName );
120 mDirector =
new QgsVectorLayerDirector( mNetwork.get(), directionField, forwardValue, backwardValue, bothValue, defaultDirection );
127 mDirector->addStrategy(
new QgsNetworkSpeedStrategy( speedField, defaultSpeed, mMultiplier * 1000.0 / 3600.0 ) );
135 mBuilder = std::make_unique< QgsGraphBuilder >( mNetwork->sourceCrs(),
true, tolerance );
140 feedback->
pushInfo( QObject::tr(
"Loading points…" ) );
165 attributes.insert( pointId, feat.
attributes() );