23 QString QgsProjectPointCartesianAlgorithm::name()
const
25 return QStringLiteral(
"projectpointcartesian" );
28 QString QgsProjectPointCartesianAlgorithm::displayName()
const
30 return QObject::tr(
"Project points (Cartesian)" );
33 QStringList QgsProjectPointCartesianAlgorithm::tags()
const
35 return QObject::tr(
"bearing,azimuth,distance,angle" ).split(
',' );
38 QString QgsProjectPointCartesianAlgorithm::group()
const
40 return QObject::tr(
"Vector geometry" );
43 QString QgsProjectPointCartesianAlgorithm::groupId()
const
45 return QStringLiteral(
"vectorgeometry" );
48 QString QgsProjectPointCartesianAlgorithm::outputName()
const
50 return QObject::tr(
"Projected" );
53 QString QgsProjectPointCartesianAlgorithm::shortHelpString()
const
55 return QObject::tr(
"This algorithm projects point geometries by a specified distance and bearing (azimuth), creating a new point layer with the projected points.\n\n"
56 "The distance is specified in layer units, and the bearing in degrees clockwise from North." );
59 QList<int> QgsProjectPointCartesianAlgorithm::inputLayerTypes()
const
69 QgsProjectPointCartesianAlgorithm *QgsProjectPointCartesianAlgorithm::createInstance()
const
71 return new QgsProjectPointCartesianAlgorithm();
74 void QgsProjectPointCartesianAlgorithm::initParameters(
const QVariantMap & )
76 std::unique_ptr< QgsProcessingParameterNumber > bearing = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral(
"BEARING" ), QObject::tr(
"Bearing (degrees from North)" ),
QgsProcessingParameterNumber::Double, 0,
false );
77 bearing->setIsDynamic(
true );
79 bearing->setDynamicLayerParameterName( QStringLiteral(
"INPUT" ) );
80 addParameter( bearing.release() );
82 std::unique_ptr< QgsProcessingParameterDistance > distance = qgis::make_unique< QgsProcessingParameterDistance >( QStringLiteral(
"DISTANCE" ), QObject::tr(
"Distance" ), 1, QStringLiteral(
"INPUT" ),
false );
83 distance->setIsDynamic(
true );
85 distance->setDynamicLayerParameterName( QStringLiteral(
"INPUT" ) );
86 addParameter( distance.release() );
96 mBearing = parameterAsDouble( parameters, QStringLiteral(
"BEARING" ), context );
98 if ( mDynamicBearing )
99 mBearingProperty = parameters.value( QStringLiteral(
"BEARING" ) ).value<
QgsProperty >();
101 mDistance = parameterAsDouble( parameters, QStringLiteral(
"DISTANCE" ), context );
103 if ( mDynamicDistance )
104 mDistanceProperty = parameters.value( QStringLiteral(
"DISTANCE" ) ).value<
QgsProperty >();
114 double distance = mDistance;
115 if ( mDynamicDistance )
117 double bearing = mBearing;
118 if ( mDynamicBearing )
119 bearing = mBearingProperty.valueAsDouble( context.
expressionContext(), bearing );
125 std::unique_ptr< QgsMultiPoint > result = qgis::make_unique< QgsMultiPoint >();
130 result->addGeometry( p->
project( distance, bearing ).
clone() );