QGIS API Documentation 3.99.0-Master (357b655ed83)
Loading...
Searching...
No Matches
qgsalgorithmspatialindex.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsalgorithmspatialindex.cpp
3 ---------------------
4 begin : November 2019
5 copyright : (C) 2019 by Alexander Bruy
6 email : alexander dot bruy at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19
21#include "qgsvectorlayer.h"
22
23#include <QString>
24
25using namespace Qt::StringLiterals;
26
28
29QString QgsSpatialIndexAlgorithm::name() const
30{
31 return u"createspatialindex"_s;
32}
33
34QString QgsSpatialIndexAlgorithm::displayName() const
35{
36 return QObject::tr( "Create spatial index" );
37}
38
39QStringList QgsSpatialIndexAlgorithm::tags() const
40{
41 return QObject::tr( "table,spatial,geometry,index,create,vector" ).split( ',' );
42}
43
44QString QgsSpatialIndexAlgorithm::group() const
45{
46 return QObject::tr( "Vector general" );
47}
48
49QString QgsSpatialIndexAlgorithm::groupId() const
50{
51 return u"vectorgeneral"_s;
52}
53
54Qgis::ProcessingAlgorithmFlags QgsSpatialIndexAlgorithm::flags() const
55{
57}
58
59
60QString QgsSpatialIndexAlgorithm::shortHelpString() const
61{
62 return QObject::tr( "Creates an index to speed up access to the features "
63 "in a layer based on their spatial location. Support "
64 "for spatial index creation is dependent on the layer's "
65 "data provider." );
66}
67
68QgsSpatialIndexAlgorithm *QgsSpatialIndexAlgorithm::createInstance() const
69{
70 return new QgsSpatialIndexAlgorithm();
71}
72
73void QgsSpatialIndexAlgorithm::initAlgorithm( const QVariantMap & )
74{
75 addParameter( new QgsProcessingParameterVectorLayer( u"INPUT"_s, QObject::tr( "Input layer" ) ) );
76
77 addOutput( new QgsProcessingOutputVectorLayer( u"OUTPUT"_s, QObject::tr( "Indexed layer" ) ) );
78}
79
80QVariantMap QgsSpatialIndexAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
81{
82 QgsVectorLayer *layer = parameterAsVectorLayer( parameters, u"INPUT"_s, context );
83
84 if ( !layer )
85 throw QgsProcessingException( QObject::tr( "Could not load source layer for %1." ).arg( "INPUT"_L1 ) );
86
87 QgsVectorDataProvider *provider = layer->dataProvider();
88
90 {
91 if ( !provider->createSpatialIndex() )
92 {
93 feedback->pushInfo( QObject::tr( "Could not create spatial index" ) );
94 }
95 }
96 else
97 {
98 feedback->pushInfo( QObject::tr( "Layer's data provider does not support spatial indexes" ) );
99 }
100
101 QVariantMap outputs;
102 outputs.insert( u"OUTPUT"_s, layer->id() );
103 return outputs;
104}
105
@ CreateSpatialIndex
Allows creation of spatial index.
Definition qgis.h:525
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
Definition qgis.h:3680
@ NoThreading
Algorithm is not thread safe and cannot be run in a background thread, e.g. for algorithms which mani...
Definition qgis.h:3659
QString id
Definition qgsmaplayer.h:86
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
virtual void pushInfo(const QString &info)
Pushes a general informational message from the algorithm.
A vector layer output for processing algorithms.
A vector layer (with or without geometry) parameter for processing algorithms.
Base class for vector data providers.
virtual bool createSpatialIndex()
Creates a spatial index on the datasource (if supported by the provider type).
virtual Q_INVOKABLE Qgis::VectorProviderCapabilities capabilities() const
Returns flags containing the supported capabilities.
Represents a vector layer which manages a vector based dataset.
QgsVectorDataProvider * dataProvider() final
Returns the layer's data provider, it may be nullptr.