426 Commits

Author SHA1 Message Date
Mathieu Pellerin
a888986567
[needs-docs][processing] Avoid field collision via optional prefix in overlay algorithms (#10092)
Makes for a more predictable collision avoidance, which
can be neccessary for some models.
2019-05-24 19:00:28 +07:00
Raymond Nijssen
6e62c0246d tests for rounded values in polygonfromlayerextent algorithm 2019-05-11 08:42:27 +02:00
Nyall Dawson
e2bd17f3c9 Split processing test files into multiple batches
There's two motivations for this:
- the existing one was getting massive and took ages to run, which was
a pain when developing. Smaller batches allow just a subset of test to
be run which is much faster.
- There's a random segfault on test exit which occurs on Travis. Rather
then disabling these absolutely critical tests altogether, I'm using
this as a method of bisecting exactly which alg is causing this.
2019-05-09 14:04:30 +10:00
Martin Dobias
fdb6a2b79a Add test for XYZ Tiles algorithm 2019-04-25 22:14:08 +02:00
nirvn
5e0fd15570 [FEATURE][processing] Add concatenate_unique support to the aggregate alg 2019-04-05 12:01:06 +07:00
Nyall Dawson
95af4d4a45 [FEATURE] New Processing algorithm "Join attributes by nearest"
K-nearest neighbour joins from the Processing toolbox!

This algorithm takes an input vector layer and creates a new
vector layer that is an with additional attributes in its attribute table
The additional attributes and their values are taken from a second
vector layer, where features are joined by finding the closest features
from each layer.

By default only the single nearest feature is joined, but optionally
the join can use the n-nearest neighboring features instead.

If a maximum distance is specified, then only features which are
closer than this distance will be matched.
2019-04-03 02:31:03 +10:00
Nyall Dawson
7bf9279a53 [processing] Fix invalid reprojection in join by location (summary) 2019-04-02 06:17:56 +10:00
Nyall Dawson
c7ac86604f [FEATURE] New algorithm "Add X/Y fields to layer"
Adds X and Y (or latitude/longitude) fields to a point layer.
The X/Y fields can be calculated in a different CRS to the
layer (e.g. creating latitude/longitude fields for a layer in
a project CRS).

Sponsored by SMEC/SJ
2019-03-21 16:08:42 +10:00
Nyall Dawson
b66b944535 [FEATURE][processing] New Raster Boolean logical OR/AND algorithms
These algorithms calculate the boolean OR or AND for a set of input
rasters. For AND, if all of the input rasters have a non-zero value
for a pixel, that pixel will be set to 1 in the output raster, otherwise
it will be set to 0. For OR, if ANY of the input rasters have a non-zero
value for a pixel, that pixel will be set to 1 in the output raster,
else 0.

A reference layer parameter specifies an existing raster layer to use
as a reference when creating the output raster. The output raster will
have the same extent, CRS, and pixel dimensions as this layer

By default, a nodata pixel in ANY of the input layers will result in
a nodata pixel in the output raster. If the 'Treat nodata values
as false' option is checked, then nodata inputs will be treated the
same as a 0 input value.

Makes for much simpler raster boolean logic calculation without
the complexity of using the raster calculator (and that's not
always possible to do anyway, e.g. when ANY of the input rasters
has a nodata pixel). It's also scalable dynamic to any number of
input rasters (unlike raster calc), so is more flexible when
used within models.
2019-03-11 07:45:44 +10:00
Nyall Dawson
49742c302a [needs-docs][processing] Add option to check validity alg to ignore self-intersection
causing rings errors

By default the algorithm now uses the strict OGC definition of polygon validity, where
a polygon is marked as invalid if a self-intersecting ring causes an interior hole.
If the "Ignore ring self intersections" option is checked, then this rule will be
ignored and a more lenient validity check will be performed.

Refs #16418, refs #21336
2019-02-27 06:05:26 +10:00
Nyall Dawson
4e04d02293 By default, validity check should treat ring self intersections as invalid
We use the OGC definition of validity to ensure consistent results
with PostGIS, GDAL, etc

Fixes #16418, fixes #21336
2019-02-27 06:05:26 +10:00
Matthias Kuhn
81f0c5ce00
Merge pull request #9241 from m-kuhn/merge-lines-on-dissolve
[processing] Merge lines on dissolve
2019-02-26 07:54:51 +01:00
Nyall Dawson
ec1218314d [processing] Fix "Add geometry attributes" handling of multipoint geom
For multipoints, export the count of geometries only
2019-02-25 07:50:48 +10:00
Matthias Kuhn
bb78d1c933
Add test for dissolve consecutive lines 2019-02-22 14:12:24 +01:00
volaya
585d42b347 [processing] fixed missing import and encoding 2019-01-30 09:09:26 +01:00
volaya
261430b961 [processing] added test for SAGA non-ascii inputs 2019-01-25 10:30:08 +01:00
Nyall Dawson
ee34431214 Use a QHash instead of std::unordered_map
Because it turns out MUCH MUCH faster
2019-01-22 13:14:03 +11:00
Nyall Dawson
195d98f43a [needs-docs][processing] Port SAGA raster surface volume to native QGIS alg
The SAGA version of this algorithm is of limited use in QGIS, because the
volume calculated is embedded only in the SAGA terminal output. This prevents
it being saved to a file, or reused within a model as an input to a later
model step.

It's also very user-unfriendly, because users must know to manually scan
the algorithm log to find the SAGA output.

Given that the maths here is trivial, this commit ports the algorithm across
to be a native QGIS c++ algorithm. The algorithm duplicates the SAGA alg
1:1, but outputs the volume (and area) to either a HTML report, or a vector
table. Additionally, the outputs are exported as numeric outputs from the
algorithm, allowing them to be re-used within models.

(It's also considerably faster, because it avoids the forced conversion
to SAGA raster format)

Fixes #8607 (properly, even though that report is closed)
2019-01-21 12:33:54 +11:00
Nyall Dawson
f89d061ba0 [FEATURE][processing] Add geodesic mode for "Join by Lines (Hub lines)" algorithm
This allows optional creation of geodesic lines, which represent the
shortest distance between the points based on the ellipsoid.

When geodesic mode is used, it is possible to split the created lines
at the antimeridian (±180 degrees longitude), which can improve
rendering of the lines. Additionally, the distance between vertices
can be specified. A smaller distance results in a denser, more accurate
line.
2019-01-17 03:39:20 +11:00
Nyall Dawson
2a774d6dac [FEATURE][processing] New algorithm "Geodesic line split at antimeridian"
Ports the similar algorithm from the shape tools plugin to c++, and utilises
built in QgsDistanceArea ellipsoidal calculations to split the lines.

This algorithm splits a line into multiple geodesic segments, whenever the
line crosses the antimeridian (±180 degrees longitude)

Splitting at the antimeridian helps the visual display of the lines in some
projections. The returned geometry will always be a multi-part geometry.

Whenever line segments in the input geometry cross the antimeridian,
they will be split into two segments, with the latitude of the breakpoint
being determined using a geodesic line connecting the points either side
of this segment. The current project ellipsoid setting will be used when
calculating this breakpoint.

If the input geometry contains M or Z values, these will be linearly
interpolated for the new vertices created at the antimeridian.

Supports in-place edit mode also.
2019-01-12 05:31:00 +10:00
Nyall Dawson
cef9c4eaec [FEATURE][processing] New algorithms "Extract Z values" and "Extract m values"
These algorithms allow users to convert z or m values present in feature
geometries to attributes in the layer. By default the z/m value from the
first vertex in the feature is extracted, but optionally statistics
can be calculated on ALL the z/m values from the geometry (e.g. calculating
mean/min/max/sum/etc of z values).
2019-01-04 05:01:40 +10:00
Nyall Dawson
5586352a13 [FEATURE][processing] New raster zonal stats algorithm
Like the vector zonal stats algorithm, but this one works with
the zones defined in another raster.

Iterates over the input rasters in blocks to be nice and
memory efficient.

From the algorithm help:

"This algorithm calculates statistics for a raster layer's
values, categorized by zones defined in another raster layer.

If the reference layer parameter is set to "Input layer",
then zones are determined by sampling the zone raster layer
value at the centroid of each pixel from the source raster
layer.

If the reference layer parameter is set to "Zones layer",
then the input raster layer will be sampled at the centroid
of each pixel from the zones raster layer.

If either the source raster layer or the zone raster layer
value is NODATA for a pixel, that pixel's value will be
skipped and not including in the calculated statistics."
2019-01-04 05:01:16 +10:00
Alexander Bruy
acd4ceca5c keep also old test for native interpolation algs 2018-12-30 09:48:45 +02:00
Alexander Bruy
09dbb8917d update tests 2018-12-30 06:44:09 +02:00
Nyall Dawson
82c13bdde0 [processing] Fix error when running delete duplicate geometries and
some input features have null geometries

Fixes #20788
2018-12-15 10:44:33 +10:00
Nyall Dawson
b95400806a [FEATURE][processing] Native "split lines by maximum length" algorithm
This algorithm takes an input (multi)line (or curve) layer, and splits
each feature into multiple parts such that no part is longer then
the specified maximum length.

Supports data-defined maximum length property, and edit in place operation.

Credit to @NathanW2 for the inspiration!
2018-12-06 10:01:31 +10:00
Alessandro Pasotti
0fde410a58
Merge pull request #8564 from elpaso/rastercalculator-fast-track
Rastercalculator memory efficient track
2018-11-29 09:32:24 +01:00
Alessandro Pasotti
81723586f5 Update reference hashes for calculator processing test 2018-11-28 22:43:28 +01:00
nirvn
cdda581819 [processing] Add test & adjust handling of negative distance value
for multi ring (constant) algorithm
2018-11-28 22:47:39 +07:00
Nyall Dawson
d1e09a2bc7 [FEATURE][processing] New algorithm to force right hand rule for polygons
This algorithm forces polygon geometries to respect the Right-Hand-Rule,
in which the area that is bounded by a polygon is to the right of the
boundary. In particular, the exterior ring is oriented in a clockwise
direction and the interior rings in a counter-clockwise direction.
2018-11-09 19:06:48 +10:00
Etienne Trimaille
6e16651d96 [FEATURE] explode hstore algorithm (#8212) 2018-11-09 13:00:29 +07:00
Nyall Dawson
4dd3e211e2 Unit tests for reomve duplicates by attribute 2018-11-01 21:47:28 +10:00
Matthias Kuhn
2e1c5e6103
Skip path checking 2018-10-31 10:27:55 +01:00
Matthias Kuhn
99b246dd78
Add comment for semi-broken control file 2018-10-31 10:27:55 +01:00
Matthias Kuhn
2c4abdf70d
Fix test for merging layers to gpkg 2018-10-31 10:27:55 +01:00
Matthias Kuhn
3949cb70c4
Fix faulty alg name in test 2018-10-31 10:27:54 +01:00
Matthias Kuhn
19276e2b03
Add merge vector layer test for gpkg 2018-10-31 10:27:54 +01:00
Harrissou Sant-anna
b478ee750c Fix "Array of offset lines" algorithm 2018-09-28 10:19:31 +10:00
Harrissou Sant-anna
9e5cc4b76b Fix array of translated features algorithms 2018-09-28 10:19:31 +10:00
Luigi Pirelli
8b07b4ed9e
Merge pull request #7626 from rudivs/kneighbour
[feature] Adapted k-neighbour concave hull plugin as QGIS 3 algorithm
2018-09-14 15:32:46 +02:00
Rudi von Staden
fd728c0854 Improve test coverage for k-nearest neighbor concave hull 2018-09-14 11:44:53 +02:00
Rudi von Staden
1a26d9401d Fix failing test for K-nearest concave hull group by field 2018-09-13 20:58:29 +02:00
Martin Dobias
1af35b294e Moved new snapping alg as another mode of "Snap geometries" processing alg 2018-09-13 16:24:37 +02:00
Martin Dobias
4a0669714b [FEATURE] Snap geometries algorithm
Makes sure that any two vertices of the vector layer are at least at distance given by the threshold value.
The algorithm moves nearby vertices to one location and adds vertices to segments that are passing around other
vertices within the threshold. It does not remove any vertices. Also, it does not modify geometries unless
needed (it does not snap coordinates to a grid).

This algorithm comes handy when doing vector overlay operations such as intersection, union or difference
to prevent possible topological errors caused by numerical errors if coordinates are very close to each other.

After running the algorithm some previously valid geometries may become invalid and therefore it may be useful
to run Fix geometries algorithm afterwards.
2018-09-13 11:46:29 +02:00
Rudi von Staden
4482c39fc8 Add tests for k-neighbour concave hull 2018-09-12 22:38:39 +02:00
Andrea Giudiceandrea
e56da0e58a
Add test for Join by location (equals)
Adds a test for "Join attributes by location" processing algorithm 'equals' predicate
2018-08-30 09:59:26 +02:00
Nyall Dawson
0d200623b1 [FEATURE][processing] Add non-joinable output to Join by Location alg
Allows unjoinable features to be saved to a separate optional layer
2018-08-18 08:03:39 +10:00
Nyall Dawson
773371a143 [FEATURE][processing] Join by field value can export unmatched records,
and reports counts of matched/unmatched features

This gives an explicit warning to users when features were not matched,
and optionally allows them to save non-matching features to a layer.
2018-08-18 08:03:39 +10:00
Nyall Dawson
8365335fd3 [FEATURE][processing] Interpolate point on line algorithm
This algorithm creates a point geometry interpolated at a
set distance along line (or polygon boundary) geometries.
2018-08-15 14:01:59 +10:00
Nyall Dawson
7ef5631d6b [FEATURE][processing] Line substring algorithm
This algorithm returns the portion of a line (or curve) which falls
between the specified start and end distances (measured from the
beginning of the line).

Z and M values are linearly interpolated from existing values.
2018-08-15 14:01:59 +10:00