78 Commits

Author SHA1 Message Date
Mathieu Pellerin
201091ea3e [FEATURE][processing] raster layer unique values count algorithm (#5308) 2017-10-09 16:42:17 +07:00
Nyall Dawson
1a32f0883c Fix clazy detaching range based for warnings 2017-09-25 17:11:46 +10:00
Nyall Dawson
0dd434c183 [processing] Port mean coordinates to c++
And remove final use of inefficient vector.extractPoints function
2017-09-23 09:25:18 +10:00
Juergen E. Fischer
782ed47d00 translation string improvements 2017-09-22 15:00:31 +02:00
Nyall Dawson
21f92a6fb2 Port line intersection and split with lines to c++ 2017-09-22 15:19:32 +10:00
Nyall Dawson
ffbb24481b Fix memory leak 2017-09-18 12:17:41 +10:00
Mathieu Pellerin
01468d0879 Merge pull request #5204 from nirvn/saveselected_native 2017-09-16 12:17:11 +07:00
Nyall Dawson
1983d8f522 Improve wording of spatial location alg parameters 2017-09-16 09:59:13 +10:00
Nyall Dawson
5ee32392f9 Use checkboxes for Extract/Select by Location algs 2017-09-16 09:59:13 +10:00
nirvn
0cdabb5e60 [needs-docs][processing] return empty layer for save
selected features algorithm if no features are selected
2017-09-15 16:16:04 +07:00
nirvn
04ee85f0e8 [processing] native save selected features algorithm 2017-09-15 15:51:30 +07:00
Nyall Dawson
8605be0dbb New algorithm to convert an extent parameter to a layer
Creates a new layer with a single feature with polygon geometry
covering the extent parameter value.

This is designed for use in models where some child algorithms require
a layer based input, while others require an extent based
parameter
2017-09-15 14:21:57 +10:00
Nyall Dawson
cfdc3c71e7 Use geometry of reproject extent parameters for more accurate clipping 2017-09-15 08:35:42 +10:00
Nyall Dawson
60b56db904 Use CRS when calculating extent during algorithm extection 2017-09-15 08:35:11 +10:00
Nyall Dawson
d8db3ecc4d [FEATURE] New processing algorithm "extract/clip by extent"
Allows extract a subset of another layer using an extent, with
optional setting to clip geometries to the extent
2017-09-15 08:33:19 +10:00
Nyall Dawson
d96a3f4dd4 Port simplify geometries to c++ 2017-09-14 09:57:15 +10:00
Nyall Dawson
8e8f3edc55 Port merge lines and smooth to c++ 2017-09-14 09:57:15 +10:00
Nyall Dawson
7c5521ecdf Port fix geometries alg to c++ 2017-09-14 09:57:15 +10:00
Nyall Dawson
2a33844416 Pass by const ref where possible 2017-09-11 21:19:22 +10:00
Nyall Dawson
2a88a5a953 Optimise calcuation of disjoint features 2017-09-10 10:59:33 +10:00
Nyall Dawson
6d94e6fc5c Optimise Extract/Select by Location alg
Only create and prepare the GEOS representation for intersection
layer features when we encounter a feature in the target layer
within that feature's bounding box.
2017-09-10 10:54:27 +10:00
Nyall Dawson
e0026609bb Fix missing geometries/attributes in Extract by Location 2017-09-10 10:45:34 +10:00
Nyall Dawson
cecdf33614 Native c++ Extract by Location algorithm 2017-09-08 20:20:49 +10:00
Nyall Dawson
1aa76ac175 Port Select by Location to c++ 2017-09-08 17:40:36 +10:00
Nyall Dawson
08c5c4b18a Add notes to see related algorithms in algorithm help 2017-09-05 19:46:26 +10:00
Nyall Dawson
16c4f830b3 [FEATURE] New algorithm for 'collecting' geometries
This is basically the equivalent of the dissolve algorithm, but
instead of a dissolving overlapping geometries the geometries
are instead just collected together into a multipart geometry.

It's designed to slot between the 'promote to multipart' algorithm
(which performs no collection of geometries - it just converts
singleparts to multiparts with 1 part) and the more complex
all-encompassing 'aggregate' algorithm.
2017-09-05 19:41:27 +10:00
Nyall Dawson
3484eb019c [FEATURE] Native 'Promote to Multipart' algorithm
This algorithm is basically the equivalent of the ST_Multi(...)
command - it forces a feature's geometry to become multipart,
regardless of the input geometry type.

If input geometries are singlepart, they will output as
multipart with just 1 part. If they are already multipart,
they will be output unchanged.
2017-09-05 19:40:35 +10:00
Nyall Dawson
9eeecbed65 Add note to see 'minimum bounding geometry' alg to feature by feature alg help 2017-09-04 08:42:03 +10:00
Nyall Dawson
85cd1c1673 [FEATURE] Split minimum enclosing geometry algs into separate
feature based algorithms

Instead of algorithms which handle both whole layers/groups
of features/individual features, we leave the whole layer
and group of features handling to the "Minimum bounding
geometry" algorithm.

The feature-by-feature algorithms are now native c++
algorithms.

This affects:
- bounding boxes
- convex hulls
- minimum enclosing circle
- minimum oriented rectangles
2017-09-04 08:42:03 +10:00
Nyall Dawson
ebda2fd212 Rename some enum values for clarity 2017-08-19 02:46:22 +10:00
Matthias Kuhn
581b89e0ec Use pointers and not references to QgsAbstractGeometry
because using this more consistently throughout the codebase makes it
easier to maintain code.
We also do not want to call the copy constructor on them, using pointers
just makes this more obvious. Further, casting is also something
that's commonly done on pointers and not references.

And if you want a value or a reference, just use QgsGeometry, it's meant
to be handled like this.
2017-08-13 20:19:32 +02:00
Nyall Dawson
4ab4a1fcad Spell check 'mitre' -> 'miter' (i.e. use en-us variation) 2017-08-07 18:08:57 +10:00
Nyall Dawson
29855b3942 Change signature of processFeature so that features are no longer modified in place 2017-07-18 19:56:42 +10:00
Nyall Dawson
792e6bd563 Always output algorithm results, even when input source has no
features

Allows more versatile models which can handle empty layers
2017-07-18 19:41:33 +10:00
Nyall Dawson
7e3c435dd6 Port some existing algorithms to QgsProcessingFeatureBasedAlgorithm 2017-07-18 19:41:33 +10:00
Nyall Dawson
1a41624370 Add QgsProcessingFeatureBasedAlgorithm subclass
An abstract QgsProcessingAlgorithm base class for processing algorithms
which operate "feature-by-feature".

Feature based algorithms are algorithms which operate on individual
features in isolation. These are algorithms where one feature is
output for each input feature, and the output feature result
for each input feature is not dependent on any other features
present in the source.

For instance, algorithms like "centroids" and "buffers" are feature
based algorithms since the centroid or buffer of a feature is
calculated for each feature in isolation. An algorithm like "dissolve"
is NOT suitable for a feature based algorithm as the dissolved output
depends on multiple input features and these features cannot be
processed in isolation.

Using QgsProcessingFeatureBasedAlgorithm as the base class for feature
based algorithms allows shortcutting much of the common algorithm code
for handling iterating over sources and pushing features to output sinks.
It also allows the algorithm execution to be optimised in future
(for instance allowing automatic multi-thread processing of the
algorithm, or use of the algorithm in "chains", avoiding the need
for temporary outputs in multi-step models).
2017-07-18 19:41:33 +10:00
Nyall Dawson
1342f4d9ac Add API to set optional destination parameters as not created by default
This allows optional outputs (such as null geometry features detected
by the Remove Null Geometries algorithm) to be skipped by default
when desirable.
2017-07-16 18:19:24 +10:00
Nyall Dawson
5deb8fcb87 Port Remove Null Geometries algorithm to c++/new API
Enhancements:
- add a new optional output for null geometries, and make
the non-null geometry output optional. This allows the algorithm
to act as a router for features with null/not null geometries
inside of a model
2017-07-16 17:56:10 +10:00
Nyall Dawson
d92583c10e Take advantage of auto created outputs in ported algorithms 2017-07-12 07:39:43 +10:00
Nyall Dawson
1e13d733c2 Move declaration of algorithm parameters/outputs to a new virtual
initAlgorithm() method

This allows 2 benefits:
- algorithms can be subclassed and have subclasses add additional
parameters/outputs to the algorithm. With the previous approach
of declaring parameters/outputs in the constructor, it's not
possible to call virtual methods to add additional parameters/
outputs (since you can't call virtual methods from a constructor).

- initAlgorithm takes a variant map argument, allowing the algorithm
to dynamically adjust its declared parameters and outputs according
to this configuration map. This potentially allows model algorithms which
can be configured to have variable numbers of parameters and
outputs at run time. E.g. a "router" algorithm which directs
features to one of any number of output sinks depending on some
user configured criteria.
2017-07-10 16:31:14 +10:00
Nyall Dawson
03275bbace Split QgsProcessingAlgorithm::create into non virtual-create
and pure virtual createInstance

Allows us to add logic which always need applying within
create(), leaving createInstance() free to just return a
raw new instance of the class
2017-07-10 10:07:32 +10:00
Nyall Dawson
f82b41e001 Move an enum to new QgsProcessing class 2017-07-08 20:49:17 +10:00
Nyall Dawson
f8e37aa7cb Fix some processing algorithm exception handling 2017-07-08 20:49:17 +10:00
Nyall Dawson
05e8928e30 Use native algorithms for processing tests where possible
And fix a few issues in the dissolve algorithm
2017-07-07 13:49:43 +10:00
Nyall Dawson
8a84e134cc Algorithms don't have to be split to prepare/process/postProcess
Since it's safe to evaluate parameters in background threads
now, it's usually going to be ok to evaluate everything in
the processAlgorithm step.

This keeps the algorithm code as simple as possible, and will
make porting faster.

Note that the prepare/postProcess virtual methods still exist
and can be used when an algorithm MUST do setup/cleanup work
in the main thread.
2017-07-07 09:28:19 +10:00
Nyall Dawson
7a1fd93ace Flush sink buffers instead of deleting sink/sources in processAlgorithm
Avoids potential issues if processAlgorithm is run in a different
thread
2017-07-07 09:27:35 +10:00
Nyall Dawson
e0c7daa2d8 Rename QgsProcessingAlgorithm::clone to ::create
Since it better describes what the function does. It returns a new
pristine copy of the algorithm, not a clone of its current state
2017-07-07 09:27:35 +10:00
Nyall Dawson
cd7776ca1c Upgrade ported python algs to be thread ready 2017-07-07 09:27:35 +10:00
Nyall Dawson
c2621b1275 Split algorithm execution into separate prepare/process/postProcess steps
The prepare and postProcess steps are designed to be run in main
thread only, while the process step can safely be run in a background
thread.
2017-07-07 09:26:17 +10:00
Nyall Dawson
9156933c9e Add a pure virtual clone method for algorithms
This is required for safely executing the algorithm in a background
thread.
2017-07-07 09:26:17 +10:00