27 void QgsBookmarksToLayerAlgorithm::initAlgorithm(
const QVariantMap & )
29 std::unique_ptr< QgsProcessingParameterEnum > sourceParam = std::make_unique<QgsProcessingParameterEnum >( QStringLiteral(
"SOURCE" ), QObject::tr(
"Bookmark source" ), QStringList() <<
30 QObject::tr(
"Project bookmarks" ) << QObject::tr(
"User bookmarks" ),
true, QVariantList() << 0 << 1 );
31 QVariantMap wrapperMetadata;
32 wrapperMetadata.insert( QStringLiteral(
"useCheckBoxes" ),
true );
34 metadata.insert( QStringLiteral(
"widget_wrapper" ), wrapperMetadata );
35 sourceParam->setMetadata( metadata );
36 addParameter( sourceParam.release() );
41 QString QgsBookmarksToLayerAlgorithm::name()
const
43 return QStringLiteral(
"bookmarkstolayer" );
46 QString QgsBookmarksToLayerAlgorithm::displayName()
const
48 return QObject::tr(
"Convert spatial bookmarks to layer" );
51 QStringList QgsBookmarksToLayerAlgorithm::tags()
const
53 return QObject::tr(
"save,extract" ).split(
',' );
56 QString QgsBookmarksToLayerAlgorithm::group()
const
58 return QObject::tr(
"Vector general" );
61 QString QgsBookmarksToLayerAlgorithm::groupId()
const
63 return QStringLiteral(
"vectorgeneral" );
66 QString QgsBookmarksToLayerAlgorithm::shortHelpString()
const
68 return QObject::tr(
"This algorithm creates a new layer containing polygon features for stored spatial bookmarks.\n\n"
69 "The export can be filtered to only bookmarks belonging to the current project, to all user bookmarks, or a combination of both." );
72 QString QgsBookmarksToLayerAlgorithm::shortDescription()
const
74 return QObject::tr(
"Converts stored spatial bookmarks to a polygon layer." );
77 QIcon QgsBookmarksToLayerAlgorithm::icon()
const
82 QString QgsBookmarksToLayerAlgorithm::svgIconPath()
const
87 QgsBookmarksToLayerAlgorithm *QgsBookmarksToLayerAlgorithm::createInstance()
const
89 return new QgsBookmarksToLayerAlgorithm();
94 QList< int > sources = parameterAsEnums( parameters, QStringLiteral(
"SOURCE" ), context );
95 if ( sources.contains( 0 ) )
101 if ( sources.contains( 1 ) )
111 fields.
append(
QgsField( QStringLiteral(
"name" ), QVariant::String ) );
112 fields.
append(
QgsField( QStringLiteral(
"group" ), QVariant::String ) );
114 std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral(
"OUTPUT" ), context, dest, fields,
QgsWkbTypes::Polygon,
crs ) );
118 int count = mBookmarks.count();
120 double step = count > 0 ? 100.0 / count : 1;
122 for (
const QgsBookmark &b : std::as_const( mBookmarks ) )
133 if ( b.extent().crs() !=
crs )
143 feedback->
reportError( QObject::tr(
"Could not reproject bookmark %1 to destination CRS" ).arg( b.name() ) );
158 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );
167 void QgsLayerToBookmarksAlgorithm::initAlgorithm(
const QVariantMap & )
171 std::unique_ptr< QgsProcessingParameterEnum > sourceParam = std::make_unique<QgsProcessingParameterEnum >( QStringLiteral(
"DESTINATION" ), QObject::tr(
"Bookmark destination" ), QStringList() <<
172 QObject::tr(
"Project bookmarks" ) << QObject::tr(
"User bookmarks" ),
false, 0 );
173 addParameter( sourceParam.release() );
175 addParameter(
new QgsProcessingParameterExpression( QStringLiteral(
"NAME_EXPRESSION" ), QObject::tr(
"Name field" ), QVariant(), QStringLiteral(
"INPUT" ) ) );
176 addParameter(
new QgsProcessingParameterExpression( QStringLiteral(
"GROUP_EXPRESSION" ), QObject::tr(
"Group field" ), QVariant(), QStringLiteral(
"INPUT" ),
true ) );
181 QString QgsLayerToBookmarksAlgorithm::name()
const
183 return QStringLiteral(
"layertobookmarks" );
186 QString QgsLayerToBookmarksAlgorithm::displayName()
const
188 return QObject::tr(
"Convert layer to spatial bookmarks" );
191 QStringList QgsLayerToBookmarksAlgorithm::tags()
const
193 return QObject::tr(
"save,extract,store" ).split(
',' );
196 QString QgsLayerToBookmarksAlgorithm::group()
const
198 return QObject::tr(
"Vector general" );
201 QString QgsLayerToBookmarksAlgorithm::groupId()
const
203 return QStringLiteral(
"vectorgeneral" );
206 QString QgsLayerToBookmarksAlgorithm::shortHelpString()
const
208 return QObject::tr(
"This algorithm creates spatial bookmarks corresponding to the extent of features contained in a layer." );
211 QString QgsLayerToBookmarksAlgorithm::shortDescription()
const
213 return QObject::tr(
"Converts feature extents to stored spatial bookmarks." );
216 QIcon QgsLayerToBookmarksAlgorithm::icon()
const
221 QString QgsLayerToBookmarksAlgorithm::svgIconPath()
const
226 QgsLayerToBookmarksAlgorithm *QgsLayerToBookmarksAlgorithm::createInstance()
const
228 return new QgsLayerToBookmarksAlgorithm();
233 mDest = parameterAsEnum( parameters, QStringLiteral(
"DESTINATION" ), context );
234 std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
239 QString nameExpressionString = parameterAsExpression( parameters, QStringLiteral(
"NAME_EXPRESSION" ), context );
240 QString groupExpressionString = parameterAsExpression( parameters, QStringLiteral(
"GROUP_EXPRESSION" ), context );
243 expressionContext.
appendScope( source->createExpressionContextScope() );
246 if ( !nameExpression.
prepare( &expressionContext ) )
251 std::unique_ptr< QgsExpression > groupExpression;
252 if ( !groupExpressionString.isEmpty() )
254 groupExpression = std::make_unique< QgsExpression >( groupExpressionString );
255 if ( !groupExpression->prepare( &expressionContext ) )
256 throw QgsProcessingException( QObject::tr(
"Invalid group expression: %1" ).arg( groupExpression->parserErrorString() ) );
257 requiredColumns.unite( groupExpression->referencedColumns() );
263 double step = source->featureCount() > 0 ? 100.0 / source->featureCount() : 1;
278 const QString name = nameExpression.
evaluate( &expressionContext ).toString();
287 if ( groupExpression )
289 group = groupExpression->evaluate( &expressionContext ).toString();
290 if ( !groupExpression->evalErrorString().isEmpty() )
292 feedback->
reportError( QObject::tr(
"Error evaluating group expression: %1" ).arg( groupExpression->evalErrorString() ) );
309 return QVariantMap();
326 for (
const QgsBookmark &b : std::as_const( mBookmarks ) )
330 res.insert( QStringLiteral(
"COUNT" ), mBookmarks.size() );