27 void QgsBookmarksToLayerAlgorithm::initAlgorithm(
const QVariantMap & )
29 std::unique_ptr< QgsProcessingParameterEnum > sourceParam = qgis::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 ) )
97 if ( sources.contains( 1 ) )
107 fields.
append(
QgsField( QStringLiteral(
"name" ), QVariant::String ) );
108 fields.
append(
QgsField( QStringLiteral(
"group" ), QVariant::String ) );
110 std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral(
"OUTPUT" ), context, dest, fields,
QgsWkbTypes::Polygon,
crs ) );
114 int count = mBookmarks.count();
116 double step = count > 0 ? 100.0 / count : 1;
118 for (
const QgsBookmark &b : qgis::as_const( mBookmarks ) )
129 if ( b.extent().crs() !=
crs )
139 feedback->
reportError( QObject::tr(
"Could not reproject bookmark %1 to destination CRS" ).arg( b.name() ) );
153 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );
162 void QgsLayerToBookmarksAlgorithm::initAlgorithm(
const QVariantMap & )
166 std::unique_ptr< QgsProcessingParameterEnum > sourceParam = qgis::make_unique<QgsProcessingParameterEnum >( QStringLiteral(
"DESTINATION" ), QObject::tr(
"Bookmark destination" ), QStringList() <<
167 QObject::tr(
"Project bookmarks" ) << QObject::tr(
"User bookmarks" ),
false, 0 );
168 addParameter( sourceParam.release() );
170 addParameter(
new QgsProcessingParameterExpression( QStringLiteral(
"NAME_EXPRESSION" ), QObject::tr(
"Name field" ), QVariant(), QStringLiteral(
"INPUT" ) ) );
171 addParameter(
new QgsProcessingParameterExpression( QStringLiteral(
"GROUP_EXPRESSION" ), QObject::tr(
"Group field" ), QVariant(), QStringLiteral(
"INPUT" ),
true ) );
176 QString QgsLayerToBookmarksAlgorithm::name()
const
178 return QStringLiteral(
"layertobookmarks" );
181 QString QgsLayerToBookmarksAlgorithm::displayName()
const
183 return QObject::tr(
"Convert layer to spatial bookmarks" );
186 QStringList QgsLayerToBookmarksAlgorithm::tags()
const
188 return QObject::tr(
"save,extract,store" ).split(
',' );
191 QString QgsLayerToBookmarksAlgorithm::group()
const
193 return QObject::tr(
"Vector general" );
196 QString QgsLayerToBookmarksAlgorithm::groupId()
const
198 return QStringLiteral(
"vectorgeneral" );
201 QString QgsLayerToBookmarksAlgorithm::shortHelpString()
const
203 return QObject::tr(
"This algorithm creates spatial bookmarks corresponding to the extent of features contained in a layer." );
206 QString QgsLayerToBookmarksAlgorithm::shortDescription()
const
208 return QObject::tr(
"Converts feature extents to stored spatial bookmarks." );
211 QIcon QgsLayerToBookmarksAlgorithm::icon()
const
216 QString QgsLayerToBookmarksAlgorithm::svgIconPath()
const
221 QgsLayerToBookmarksAlgorithm *QgsLayerToBookmarksAlgorithm::createInstance()
const
223 return new QgsLayerToBookmarksAlgorithm();
228 mDest = parameterAsEnum( parameters, QStringLiteral(
"DESTINATION" ), context );
229 std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
234 QString nameExpressionString = parameterAsExpression( parameters, QStringLiteral(
"NAME_EXPRESSION" ), context );
235 QString groupExpressionString = parameterAsExpression( parameters, QStringLiteral(
"GROUP_EXPRESSION" ), context );
238 expressionContext.
appendScope( source->createExpressionContextScope() );
241 if ( !nameExpression.
prepare( &expressionContext ) )
246 std::unique_ptr< QgsExpression > groupExpression;
247 if ( !groupExpressionString.isEmpty() )
249 groupExpression = qgis::make_unique< QgsExpression >( groupExpressionString );
250 if ( !groupExpression->prepare( &expressionContext ) )
251 throw QgsProcessingException( QObject::tr(
"Invalid group expression: %1" ).arg( groupExpression->parserErrorString() ) );
252 requiredColumns.unite( groupExpression->referencedColumns() );
258 double step = source->featureCount() > 0 ? 100.0 / source->featureCount() : 1;
273 const QString name = nameExpression.
evaluate( &expressionContext ).toString();
282 if ( groupExpression )
284 group = groupExpression->evaluate( &expressionContext ).toString();
285 if ( !groupExpression->evalErrorString().isEmpty() )
287 feedback->
reportError( QObject::tr(
"Error evaluating group expression: %1" ).arg( groupExpression->evalErrorString() ) );
304 return QVariantMap();
321 for (
const QgsBookmark &b : qgis::as_const( mBookmarks ) )
325 res.insert( QStringLiteral(
"COUNT" ), mBookmarks.size() );