[qgis] 01/01: New upstream version 2.18.12+dfsg
Bas Couwenberg
sebastic at debian.org
Fri Aug 18 20:23:26 UTC 2017
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch upstream
in repository qgis.
commit fc9eb39218b888edec16166f15d51256b23aba1c
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Fri Aug 18 20:02:17 2017 +0200
New upstream version 2.18.12+dfsg
---
CMakeLists.txt | 2 +-
ChangeLog | 184 ++++++
debian/changelog | 10 +-
i18n/qgis_de.ts | 4 +-
python/plugins/processing/algs/gdal/merge.py | 7 +
.../plugins/processing/algs/saga/SagaAlgorithm.py | 2 +-
.../processing/algs/saga/SagaNameDecorator.py | 12 +-
.../processing/algs/saga/description/ANGMAP.txt | 10 +
.../algs/saga/description/AccumulatedCost.txt | 12 +
.../saga/description/AccumulationFunctions.txt | 12 +
.../AddIndicatorFieldsforCategories.txt | 6 +
.../saga/description/AngularDistanceWeighted.txt | 23 +
...tificialNeuralNetworkClassification(OpenCV).txt | 22 +
.../algs/saga/description/Aspect-SlopeGrid.txt | 6 +
.../description/AutomatedCloudCoverAssessment.txt | 14 +
.../algs/saga/description/AverageWithMask1.txt | 8 +
.../algs/saga/description/AverageWithMask2.txt | 8 +
.../saga/description/AverageWithThereshold1.txt | 7 +
.../saga/description/AverageWithThereshold2.txt | 7 +
.../saga/description/AverageWithThereshold3.txt | 7 +
.../algs/saga/description/BasicTerrainAnalysis.txt | 20 +
.../description/BinaryErosion-Reconstruction.txt | 5 +
.../algs/saga/description/BioclimaticVariables.txt | 26 +
.../description/BoostingClassification(OpenCV).txt | 16 +
.../saga/description/CategoricalCoincidence.txt | 8 +
.../algs/saga/description/ChangeDataStorage.txt | 7 +
.../CloseGapswithStepwiseResampling.txt | 10 +
.../saga/description/ClusterAnalysis(Shapes).txt | 10 +
.../algs/saga/description/ClusterAnalysis.txt | 10 +
.../saga/description/ClusterAnalysisforGrids.txt | 12 +-
.../algs/saga/description/Concentration.txt | 10 +
.../description/ConfusionMatrix(PolygonsGrid).txt | 12 +
.../saga/description/ConfusionMatrix(TwoGrids).txt | 18 +
.../algs/saga/description/ConnectivityAnalysis.txt | 10 +
.../algs/saga/description/ConstantGrid.txt | 14 +
.../algs/saga/description/CoveredDistance.txt | 4 +
.../algs/saga/description/CreatePointGrid.txt | 8 +
.../DecisionTreeClassification(OpenCV).txt | 13 +
.../algs/saga/description/Destriping.txt | 9 +
.../algs/saga/description/DestripingwithMask.txt | 14 +
.../algs/saga/description/Difference.txt | 6 +
.../algs/saga/description/DiffusePollutionRisk.txt | 13 +
.../algs/saga/description/DirectionalAverage.txt | 7 +
.../algs/saga/description/Distance(ViGrA).txt | 5 +
.../saga/description/EarthsOrbitalParameters.txt | 6 +
.../algs/saga/description/EdgeDetection(ViGrA).txt | 7 +
.../saga/description/EnhancedVegetationIndex.txt | 10 +
.../algs/saga/description/EnumerateTableField.txt | 5 +
.../algs/saga/description/FieldStatistics.txt | 5 +
.../saga/description/FindFieldofExtremeValue.txt | 9 +
.../algs/saga/description/FourierFilter(ViGrA).txt | 9 +
.../description/FourierTransform(RealViGrA).txt | 4 +
.../saga/description/FourierTransform(ViGrA).txt | 6 +
.../description/FourierTransformInverse(ViGrA).txt | 6 +
.../description/FourierTransformation(OpenCV).txt | 5 +
.../algs/saga/description/FunctionFit.txt | 9 +
.../FuzzyLandformElementClassification.txt | 31 +
.../saga/description/GWRforMultiplePredictors.txt | 16 +
.../GWRforSinglePredictor(GriddedModelOutput).txt | 27 +
.../saga/description/GWRforSinglePredictorGrid.txt | 20 +
.../algs/saga/description/GenerateShapes.txt | 8 +
.../GeodesicMorphologicalReconstruction.txt | 9 +
.../saga/description/GeographicCoordinateGrids.txt | 5 +
.../algs/saga/description/GridCombination.txt | 12 +
.../saga/description/GridStatisticsforPoints.txt | 17 +
.../saga/description/IMCORR-FeatureTracking.txt | 11 +
.../saga/description/ISODATAClusteringforGrids.txt | 10 +
.../processing/algs/saga/description/Identity.txt | 6 +
.../processing/algs/saga/description/Intersect.txt | 6 +
.../algs/saga/description/InvertGrid.txt | 4 +
.../saga/description/K-MeansClusteringforGrids.txt | 11 +
.../K-NearestNeighboursClassification(OpenCV).txt | 11 +
.../algs/saga/description/LS-FactorFieldBased.txt | 16 +
.../saga/description/LandUseScenarioGenerator.txt | 8 +
.../algs/saga/description/LineSmoothing.txt | 9 +
.../MaximumEntropyPresencePrediction.txt | 18 +
.../saga/description/MaximumFlowPathLength.txt | 6 +
.../saga/description/MeltonRuggednessNumber.txt | 6 +
.../algs/saga/description/MeshDenoise.txt | 9 +
.../algs/saga/description/MirrorGrid.txt | 5 +
.../saga/description/ModifedQuadraticShepard.txt | 12 +
.../saga/description/MonthlyGlobalbyLatitude.txt | 7 +
.../description/MorphologicalFilter(OpenCV).txt | 8 +
.../description/MorphologicalFilter(ViGrA).txt | 8 +
.../algs/saga/description/MorphometricFeatures.txt | 19 +
.../algs/saga/description/Mosaicking.txt | 2 +-
.../MultipleLinearRegressionAnalysis(Shapes).txt | 12 +
.../MultipleLinearRegressionAnalysis.txt | 12 +
...leRegressionAnalysis(GridandPredictorGrids).txt | 16 +
...RegressionAnalysis(PointsandPredictorGrids).txt | 20 +
.../NormalBayesClassification(OpenCV).txt | 8 +
.../saga/description/PET(afterHargreavesGrid).txt | 10 +
.../saga/description/PET(afterHargreavesTable).txt | 8 +
.../algs/saga/description/PointDistances.txt | 9 +
.../saga/description/PolygonSelf-Intersection.txt | 5 +
.../RandomForestClassification(OpenCV).txt | 14 +
.../RandomForestPresencePrediction(ViGrA).txt | 20 +
.../RegressionAnalysis(PointsandPredictorGrid).txt | 9 +
.../algs/saga/description/RegressionKriging.txt | 32 +
.../algs/saga/description/ResamplingFilter.txt | 6 +
.../algs/saga/description/RiverBasin.txt | 19 +
.../algs/saga/description/RiverGridGeneration.txt | 9 +
.../algs/saga/description/SVMClassification.txt | 24 +
.../algs/saga/description/SeededRegionGrowing.txt | 15 +
.../algs/saga/description/SievingClasses.txt | 8 +
.../saga/description/SimpleFilterwithinshapes.txt | 8 +
.../algs/saga/description/SimpleKriging.txt | 25 +
.../SingleValueDecomposition(OpenCV).txt | 6 +
.../description/SlopeLimitedFlowAccumulation.txt | 10 +
.../algs/saga/description/Smoothing(ViGrA).txt | 7 +
.../algs/saga/description/SnapPointstoGrid.txt | 9 +
.../algs/saga/description/SnapPointstoLines.txt | 7 +
.../algs/saga/description/SnapPointstoPoints.txt | 7 +
.../algs/saga/description/SplitLinesatPoints.txt | 7 +
.../algs/saga/description/SplitLineswithLines.txt | 6 +
.../SupervisedClassificationforGrids.txt | 21 +
.../SupervisedClassificationforShapes.txt | 20 +
.../SupportVectorMachineClassification(OpenCV).txt | 15 +
.../SurfaceGradientandConcentration.txt | 12 +
.../algs/saga/description/SurfaceandGradient.txt | 6 +
.../saga/description/SymmetricalDifference.txt | 6 +
.../processing/algs/saga/description/TCILow.txt | 5 +
.../saga/description/TasseledCapTransformation.txt | 11 +
.../algs/saga/description/TerrainMapView.txt | 11 +
...rrainSurfaceClassification(IwahashiandPike).txt | 16 +
.../saga/description/TerrainSurfaceConvexity.txt | 13 +
.../saga/description/TerrainSurfaceTexture.txt | 11 +
.../algs/saga/description/ThiessenPolygons.txt | 5 +
.../description/TopofAtmosphereReflectance.txt | 69 +++
.../algs/saga/description/TopographicOpenness.txt | 9 +
.../processing/algs/saga/description/Union.txt | 6 +
.../processing/algs/saga/description/Update.txt | 6 +
.../description/UpslopeandDownslopeCurvature.txt | 9 +
.../algs/saga/description/ValleyDepth.txt | 8 +
.../ValleyandRidgeDetection(TopHatApproach).txt | 12 +
.../description/VegetationIndex(DistanceBased).txt | 12 +
.../algs/saga/description/WarpingShapes.txt | 10 +
.../description/WatershedSegmentation(ViGrA).txt | 7 +
.../algs/saga/description/WindExpositionIndex.txt | 9 +
...RegressionAnalysis(PointsandPredictorGrids).txt | 14 +
python/plugins/processing/gui/AlgorithmExecutor.py | 1 +
.../plugins/processing/gui/ScriptEditorDialog.py | 1 -
python/plugins/processing/tools/dataobjects.py | 15 +-
src/app/dwg/libdxfrw/intern/dwgreader18.cpp | 6 +-
src/app/qgisapp.cpp | 2 +-
src/app/qgsclipboard.cpp | 13 +-
src/core/qgsgml.cpp | 17 +-
src/core/qgsgml.h | 4 +-
src/core/qgssnappingutils.cpp | 3 +-
src/core/qgsvectorfilewriter.cpp | 135 ++++-
src/core/qgsvectorlayercache.cpp | 1 +
.../symbology-ng/qgsinvertedpolygonrenderer.cpp | 8 +
src/core/symbology-ng/qgsinvertedpolygonrenderer.h | 2 +
src/customwidgets/CMakeLists.txt | 1 +
.../editorwidgets/core/qgseditorwidgetwrapper.h | 2 +-
.../editorwidgets/qgsrelationreferencewidget.cpp | 2 +-
.../qgsvaluerelationwidgetwrapper.cpp | 24 +
.../editorwidgets/qgsvaluerelationwidgetwrapper.h | 5 +
src/providers/oracle/qgsoracleprovider.cpp | 39 +-
src/server/qgswfsserver.cpp | 4 +-
src/server/qgswmsserver.cpp | 5 +-
tests/src/app/testqgisappclipboard.cpp | 25 +
tests/src/core/testqgsinvertedpolygonrenderer.cpp | 12 +
tests/src/gui/CMakeLists.txt | 2 +-
.../src/gui/testqgsvaluerelationwidgetwrapper.cpp | 107 ++++
tests/src/python/CMakeLists.txt | 1 +
tests/src/python/test_qgsserver_two_layers.py | 119 ++++
tests/testdata/inverted_polys_rule.qml | 297 +++++++++
tests/testdata/qgis_server/secondlayer.cpg | 1 +
tests/testdata/qgis_server/secondlayer.dbf | Bin 0 -> 87 bytes
tests/testdata/qgis_server/secondlayer.prj | 1 +
tests/testdata/qgis_server/secondlayer.qpj | 1 +
tests/testdata/qgis_server/secondlayer.shp | Bin 0 -> 404 bytes
tests/testdata/qgis_server/secondlayer.shx | Bin 0 -> 116 bytes
.../qgis_server/test_project_two_layers.qgs | 669 +++++++++++++++++++++
.../qgis_server/wfs_getfeature_multiple.txt | 97 +++
176 files changed, 3254 insertions(+), 87 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 263b9b3..6249a5d 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
SET(CPACK_PACKAGE_VERSION_MAJOR "2")
SET(CPACK_PACKAGE_VERSION_MINOR "18")
-SET(CPACK_PACKAGE_VERSION_PATCH "11")
+SET(CPACK_PACKAGE_VERSION_PATCH "12")
SET(COMPLETE_VERSION ${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH})
SET(RELEASE_NAME "Las Palmas")
IF (POLICY CMP0048) # in CMake 3.0.0+
diff --git a/ChangeLog b/ChangeLog
index ea214ad..907cb06 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,165 @@
+Juergen E. Fischer <jef at norbit.de> 2017-08-18
+
+ Fix trusty build (QStringLiteral is Qt5; followup b6254513d64)
+
+Merge: 987f1acff8 b73b25d495
+Alessandro Pasotti <elpaso at itopen.it> 2017-08-17
+
+ Merge pull request #5030 from boundlessgeo/Win_CutAndPaste_2-18_issue16870
+
+ Clipboard Cut&Paste fix when attached special field values. Fixes #16870
+
+Luigi Pirelli <luipir at gmail.com> 2017-08-17
+
+ fixed unnecessary deepcopy and use the correct api
+
+Luigi Pirelli <luipir at gmail.com> 2017-08-06
+
+ From Clipboard Cut&Paste fix when attached special field values. Fiexies #16870
+
+Juergen E. Fischer <jef at norbit.de> 2017-08-08
+
+ oracle provider: skip updating of key attributes of added features for versioned tables (backport of e7700db46a)
+
+Matthias Kuhn <matthias at opengis.ch> 2017-08-14
+
+ Make inverted polygon legend items checkable
+
+ This was not working with legendSymbolItemsV2(), in particular tested
+ with rule based renderer.
+
+Larry Shaffer <lshaffer at boundlessgeo.com> 2017-08-14
+
+ Add QSCINTILLA_INCLUDE_DIR to custom widgets CMake setup
+
+Nyall Dawson <nyall.dawson at gmail.com> 2017-08-07
+
+ Fix valgrind jump on uninitialised values warnings
+
+Nyall Dawson <nyall.dawson at gmail.com> 2017-08-07
+
+ Fix crash when editing feature after opening a form with relation reference widget
+
+ Also fixes a leak/performance issue - the attribute table model
+ for the relation reference widget is not parented to the widget,
+ so it is never cleaned up when the widget is deleted.
+
+Merge: 8adf1c4d6b f275372489
+Alessandro Pasotti <elpaso at itopen.it> 2017-08-07
+
+ Merge pull request #4893 from cmangeat/bug_16509
+
+ allow WFS GetFeature upon multiple layers, fixes #16509
+
+Christophe Mangeat <christophe.mangeat at camptocamp.com> 2017-08-07
+
+ fix indentaton test ? (scripts/prepare-commit.sh)
+
+Christophe Mangeat <christophe.mangeat at camptocamp.com> 2017-08-03
+
+ use unitest assert and os.path.join as adviced
+
+Juergen E. Fischer <jef at norbit.de> 2017-07-28
+
+ German translation fix
+
+tcoupin <thibault.coupin at gmail.com> 2017-07-20
+
+ Fix srsDimension parsing in GML
+
+Merge: 8ccc84ed22 399f01afb4
+Hugo Mercier <hugo.mercier at oslandia.com> 2017-07-27
+
+ Merge pull request #4925 from pblottiere/bugfix_scrolllocked_218
+
+ Fixes value relation widget to keep scrollbar activated, fixes #16654 (backport)
+
+Blottiere Paul <blottiere.paul at gmail.com> 2017-07-27
+
+ Add tests
+
+Blottiere Paul <blottiere.paul at gmail.com> 2017-07-27
+
+ Fixes value relation widget to always keep scrollbar activated. Fixes #16654
+
+rldhont <rldhont at gmail.com> 2017-07-26
+
+ [BUGFIX][SERVER] GetFeatureInfo not evaluated for maptip context when using FILTER param
+
+ fixed #16670
+
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-25
+
+ fix indentation
+
+Merge: 3f20650b1e 9593a8bb50
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-25
+
+ Merge branch 'fix_gdalmerge_nodata' of https://github.com/NaturalGIS/naturalgis_qgis into fix_gdalmerge_nodata
+
+Merge: 01e062e4bc 456e01581a
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-25
+
+ Merge branch 'fix_saga_cluster_analysis' of https://github.com/NaturalGIS/naturalgis_qgis into fix_saga_cluster_analysis
+
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-25
+
+ fix indentation
+
+Merge: 601e37351b 9a181488a6
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-25
+
+ Merge branch 'saga_desc_2_18' of https://github.com/volaya/QGIS into saga_desc_2_18
+
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-25
+
+ add missed parameter name
+
+Juergen E. Fischer <jef at norbit.de> 2017-07-24
+
+ vector layer save as: adjust our to OGR's defaults
+ * GPX_USE_EXTENSIONS default is false not true (fixes #16811)
+ * CSV GEOMETRY is none not AS_XY (fixes #16819)
+
+ (backported from commit cb088a2a0cb6224600504574f749348cc4df8bf2)
+
+Giovanni Manghi <giovanni.manghi at naturalgis.pt> 2017-07-24
+
+ add a nodata option for the gdal merge tool
+
+Giovanni Manghi <giovanni.manghi at naturalgis.pt> 2017-07-24
+
+ fix SAGA cluster analysis for rasters
+
+volaya <volayaf at gmail.com> 2017-07-24
+
+ [processing] fixed last commit
+
+volaya <volayaf at gmail.com> 2017-07-24
+
+ [processing] get layers list using map layer registry
+
+ fixes #16919
+
+volaya <volayaf at gmail.com> 2017-06-23
+
+ added new SAGA descriptions
+
+Merge: 29548e7df1 8b2a550c29
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-22
+
+ Merge pull request #4902 from NaturalGIS/saga_218_mosaiking
+
+ [processing] fix SAGA LTR mosaiking tool
+
+Giovanni Manghi <giovanni.manghi at naturalgis.pt> 2017-07-21
+
+ fix SAGA LTR mosaiking tool
+
+Juergen E. Fischer <jef at norbit.de> 2017-07-21
+
+ Release of 2.18.11
+
Nyall Dawson <nyall.dawson at gmail.com> 2017-07-21
Correctly create raster for heatmap output
@@ -27,6 +189,16 @@ Alexander Bruy <alexander.bruy at gmail.com> 2017-07-20
[processing] fix SAGA LTR Catchment Area tools
+Christophe Mangeat <christophe.mangeat at camptocamp.com> 2017-07-20
+
+ try to please indentation test
+
+Christophe Mangeat <christophe.mangeat at camptocamp.com> 2017-07-20
+
+ wfs, get features upon many layers, add test
+
+ and fix iterator trouble (avoid bad values in response summary, wfs:FeatureCollection, TYPENAME)
+
Giovanni Manghi <giovanni.manghi at naturalgis.pt> 2017-07-20
fix QGIS import in PostGIS optional parameter. Fixes #16871
@@ -35,6 +207,10 @@ Giovanni Manghi <giovanni.manghi at naturalgis.pt> 2017-07-20
fix SAGA LTR Catchement Area tools
+Christophe Mangeat <christophe.mangeat at camptocamp.com> 2017-07-20
+
+ fix for https://issues.qgis.org/issues/16509
+
Merge: 3120068bf1 08d0476048
Alexander Bruy <alexander.bruy at gmail.com> 2017-07-20
@@ -97,6 +273,10 @@ Nyall Dawson <nyall.dawson at gmail.com> 2017-07-17
Fix bad string
+Alexander Bruy <alexander.bruy at gmail.com> 2017-07-16
+
+ indentation
+
Matthias Kuhn <matthias at opengis.ch> 2017-07-13
Return invalid fid instead of null fid
@@ -311,6 +491,10 @@ Juergen E. Fischer <jef at norbit.de> 2017-06-23
Release of 2.18.10
+volaya <volayaf at gmail.com> 2017-06-23
+
+ added new SAGA descriptions
+
Nathan Woodrow <woodrow.nathan at gmail.com> 2017-06-23
[MSSQL] Don't MakeValid on geometries
diff --git a/debian/changelog b/debian/changelog
index 0a1cfab..971ce36 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,14 @@
-qgis (2.18.11) UNRELEASED; urgency=medium
+qgis (2.18.12) UNRELEASED; urgency=medium
+
+ * Release of 2.18.12
+
+ -- Jürgen E. Fischer <jef at norbit.de> Fri, 18 Aug 2017 14:31:22 +0200
+
+qgis (2.18.11) unstable; urgency=medium
* Release of 2.18.11
- -- Jürgen E. Fischer <jef at norbit.de> Fri, 21 Jul 2017 14:00:06 +0200
+ -- Jürgen E. Fischer <jef at norbit.de> Fri, 18 Aug 2017 14:31:22 +0200
qgis (2.18.10) unstable; urgency=medium
diff --git a/i18n/qgis_de.ts b/i18n/qgis_de.ts
index c82b9b7..be5018e 100644
--- a/i18n/qgis_de.ts
+++ b/i18n/qgis_de.ts
@@ -29469,7 +29469,7 @@ Die Datei ist möglicherweise in einer anderen Anwendung geöffnet.</translation
</message>
<message>
<source>Select line color</source>
- <translation>Lienienfarbe wählen</translation>
+ <translation>Linienfarbe wählen</translation>
</message>
<message>
<source>Transparent line</source>
@@ -62246,7 +62246,7 @@ und nur die Geometriespalte des Haupttypname kann als die Geometriespalte des Er
<name>QgsSimpleLineSymbolLayerV2Widget</name>
<message>
<source>Select line color</source>
- <translation>Lienienfarbe wählen</translation>
+ <translation>Linienfarbe wählen</translation>
</message>
<message>
<source>Width Assistant...</source>
diff --git a/python/plugins/processing/algs/gdal/merge.py b/python/plugins/processing/algs/gdal/merge.py
index 266e174..9822e77 100644
--- a/python/plugins/processing/algs/gdal/merge.py
+++ b/python/plugins/processing/algs/gdal/merge.py
@@ -34,6 +34,7 @@ from processing.core.outputs import OutputRaster
from processing.core.parameters import ParameterBoolean
from processing.core.parameters import ParameterMultipleInput
from processing.core.parameters import ParameterSelection
+from processing.core.parameters import ParameterNumber
from processing.tools.system import isWindows
from processing.algs.gdal.GdalUtils import GdalUtils
@@ -45,6 +46,7 @@ class merge(GdalAlgorithm):
INPUT = 'INPUT'
OUTPUT = 'OUTPUT'
PCT = 'PCT'
+ NODATA = 'NODATA'
SEPARATE = 'SEPARATE'
RTYPE = 'RTYPE'
@@ -62,6 +64,8 @@ class merge(GdalAlgorithm):
self.tr('Grab pseudocolor table from first layer'), False))
self.addParameter(ParameterBoolean(merge.SEPARATE,
self.tr('Place each input file into a separate band'), False))
+ self.addParameter(ParameterNumber(self.NODATA,
+ self.tr('Assign a specified nodata value to output bands'), None, None, -9999))
self.addParameter(ParameterSelection(self.RTYPE,
self.tr('Output raster type'), self.TYPE, 5))
@@ -69,6 +73,9 @@ class merge(GdalAlgorithm):
def getConsoleCommands(self):
arguments = []
+ if self.getParameterValue(merge.NODATA):
+ arguments.append('-a_nodata')
+ arguments.append(unicode(self.getParameterValue(merge.NODATA)))
arguments.append('-ot')
arguments.append(self.TYPE[self.getParameterValue(self.RTYPE)])
if self.getParameterValue(merge.SEPARATE):
diff --git a/python/plugins/processing/algs/saga/SagaAlgorithm.py b/python/plugins/processing/algs/saga/SagaAlgorithm.py
index f20bb19..69c5db9 100644
--- a/python/plugins/processing/algs/saga/SagaAlgorithm.py
+++ b/python/plugins/processing/algs/saga/SagaAlgorithm.py
@@ -168,7 +168,7 @@ class SagaAlgorithm(GeoAlgorithm):
layers = param.value.split(';')
if layers is None or len(layers) == 0:
continue
- if param.datatype == dataobjects.TYPE_RASTER:
+ if param.datatype == ParameterMultipleInput.TYPE_RASTER:
for i, layerfile in enumerate(layers):
if layerfile.endswith('sdat'):
layerfile = param.value[:-4] + "sgrd"
diff --git a/python/plugins/processing/algs/saga/SagaNameDecorator.py b/python/plugins/processing/algs/saga/SagaNameDecorator.py
index c49c002..b150bfb 100644
--- a/python/plugins/processing/algs/saga/SagaNameDecorator.py
+++ b/python/plugins/processing/algs/saga/SagaNameDecorator.py
@@ -33,11 +33,17 @@ groups = {'grid_analysis': 'Raster analysis',
'grid_gridding': 'Raster creation tools',
'grid_spline': 'Raster creation tools',
'grid_tools': 'Raster tools',
+ 'contrib_perego': 'Raster tools',
+ 'climate_tools': 'Climate tools',
'grid_visualisation': 'Raster visualization',
'imagery_classification': 'Image analysis',
'imagery_rga': 'Image analysis',
'imagery_segmentation': 'Image analysis',
'imagery_tools': 'Image analysis',
+ 'imagery_maxent': 'Image analysis',
+ 'imagery_opencv': 'Image analysis',
+ 'imagery_vigra': 'Image analysis',
+ 'imagery_svm': 'Image analysis',
'io_esri_e00': 'I/O',
'io_gdal': 'I/O',
'io_gps': 'I/O',
@@ -63,6 +69,8 @@ groups = {'grid_analysis': 'Raster analysis',
'sim_ecosystems_hugget': 'Simulation',
'sim_fire_spreading': 'Simulation',
'sim_hydrology': 'Simulation',
+ 'sim_rivflow': 'Simulation',
+ 'sim_qm_of_esp': 'Simulation',
'statistics_grid': 'Geostatistics',
'statistics_kriging': 'Raster creation tools',
'statistics_points': 'Geostatistics',
@@ -72,6 +80,7 @@ groups = {'grid_analysis': 'Raster analysis',
'ta_hydrology': 'Terrain Analysis - Hydrology',
'ta_lighting': 'Terrain Analysis - Lighting',
'ta_morphometry': 'Terrain Analysis - Morphometry',
+ 'ta_slope_stability': 'Terrain Analysis - Morphometry',
'ta_preprocessor': 'Terrain Analysis - Hydrology',
'ta_profiles': 'Terrain Analysis - Profiles',
'table_calculus': 'Table tools',
@@ -82,11 +91,12 @@ groups = {'grid_analysis': 'Raster analysis',
def decoratedGroupName(name):
return groups.get(name, name)
+
algorithms = {'Add Grid Values to Points': 'Add raster values to points',
'Add Grid Values to Shapes': 'Add raster values to features',
'Change Grid Values': 'Reclassify values (simple)',
'Clip Grid with Polygon': 'Clip raster with polygon',
- 'Cluster Analysis for Grids': 'Cluster Analysis',
+ 'K-Means Clustering for Grid': 'Cluster Analysis',
'Contour Lines from Grid': 'Contour Lines',
'Cubic Spline Approximation': 'Interpolate (Cubic spline)',
'Cut Shapes Layer': 'Cut vector Layer',
diff --git a/python/plugins/processing/algs/saga/description/ANGMAP.txt b/python/plugins/processing/algs/saga/description/ANGMAP.txt
new file mode 100644
index 0000000..23ce3fd
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ANGMAP.txt
@@ -0,0 +1,10 @@
+ANGMAP
+ta_slope_stability
+ParameterRaster|DEM|Elevation|False
+ParameterRaster|C|Dip grid (degrees)|True
+ParameterRaster|D|Dip direction grid (degrees)|True
+ParameterNumber|fB|Global structure dip (degrees)|None|None| 45.000000
+ParameterNumber|fC|Global structure dip direction (degrees)|None|None| 90.000000
+OutputRaster|E|Angle
+OutputRaster|F|CL dipdir
+OutputRaster|G|CL dip
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AccumulatedCost.txt b/python/plugins/processing/algs/saga/description/AccumulatedCost.txt
new file mode 100644
index 0000000..0798ded
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AccumulatedCost.txt
@@ -0,0 +1,12 @@
+Accumulated Cost
+grid_analysis
+ParameterSelection|DEST_TYPE|Input Type of Destinations|[0] Point;[1] Grid| 0
+ParameterVector|DEST_POINTS|Destinations|-1|False
+ParameterRaster|DEST_GRID|Destinations|False
+ParameterRaster|COST|Local Cost|False
+ParameterRaster|DIR_MAXCOST|Direction of Maximum Cost|True
+ParameterSelection|DIR_UNIT|Units of Direction|[0] radians;[1] degree| 0
+ParameterNumber|DIR_K|K Factor|None|None| 2.000000
+OutputRaster|ACCUMULATED|Accumulated Cost
+OutputRaster|ALLOCATION|Allocation
+ParameterNumber|THRESHOLD|Threshold for different route| 0.000000|None| 0.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AccumulationFunctions.txt b/python/plugins/processing/algs/saga/description/AccumulationFunctions.txt
new file mode 100644
index 0000000..ef19e65
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AccumulationFunctions.txt
@@ -0,0 +1,12 @@
+Accumulation Functions
+grid_analysis
+ParameterRaster|SURFACE|Surface|False
+ParameterRaster|INPUT|Input|False
+ParameterRaster|STATE_IN|State t|True
+ParameterRaster|CONTROL|Operation Control|True
+ParameterRaster|CTRL_LINEAR|Linear Flow Control Grid|True
+OutputRaster|FLUX|Flux
+OutputRaster|STATE_OUT|State t + 1
+ParameterSelection|OPERATION|Operation|[0] accuflux;[1] accucapacityflux / state;[2] accufractionflux / state;[3] accuthresholdflux / state;[4] accutriggerflux / state| 0
+ParameterBoolean|LINEAR|Switch to Linear Flow|True
+ParameterNumber|THRES_LINEAR|Threshold Linear Flow|None|None| 0.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AddIndicatorFieldsforCategories.txt b/python/plugins/processing/algs/saga/description/AddIndicatorFieldsforCategories.txt
new file mode 100644
index 0000000..684c960
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AddIndicatorFieldsforCategories.txt
@@ -0,0 +1,6 @@
+Add Indicator Fields for Categories
+table_tools
+ParameterTable|TABLE|Table|False
+ParameterTable|FIELD|Categories|False
+ParameterTable|OUT_TABLE|Output table with field(s) deleted|True
+OutputVector|OUT_SHAPES|Output shapes with field(s) deleted
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AngularDistanceWeighted.txt b/python/plugins/processing/algs/saga/description/AngularDistanceWeighted.txt
new file mode 100644
index 0000000..9523f8f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AngularDistanceWeighted.txt
@@ -0,0 +1,23 @@
+Angular Distance Weighted
+grid_gridding
+ParameterVector|SHAPES|Points|-1|False
+ParameterTable|FIELD|Attribute|False
+ParameterSelection|TARGET_DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system| 0
+ParameterNumber|TARGET_USER_SIZE|Cellsize| 0.000000|None| 1.000000
+ParameterNumber|TARGET_USER_XMIN|Left|None|None| 0.000000
+ParameterNumber|TARGET_USER_XMAX|Right|None|None| 100.000000
+ParameterNumber|TARGET_USER_YMIN|Bottom|None|None| 0.000000
+ParameterNumber|TARGET_USER_YMAX|Top|None|None| 100.000000
+ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells| 0
+ParameterRaster|TARGET_TEMPLATE|Target System|True
+OutputRaster|TARGET_OUT_GRID|Target Grid
+ParameterSelection|SEARCH_RANGE|Search Range|[0] local;[1] global| 0
+ParameterNumber|SEARCH_RADIUS|Maximum Search Distance| 0.000000|None| 1000.000000
+ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points within search distance| 0
+ParameterNumber|SEARCH_POINTS_MIN|Minimum| 1|None| -1
+ParameterNumber|SEARCH_POINTS_MAX|Maximum| 1|None| 20
+ParameterSelection|SEARCH_DIRECTION|Direction|[0] all directions;[1] quadrants| 0
+ParameterSelection|DW_WEIGHTING|Weighting Function|[0] no distance weighting;[1] inverse distance to a power;[2] exponential;[3] gaussian weighting| 1
+ParameterNumber|DW_IDW_POWER|Inverse Distance Weighting Power| 0.000000|None| 2.000000
+ParameterBoolean|DW_IDW_OFFSET|Inverse Distance Offset|False
+ParameterNumber|DW_BANDWIDTH|Gaussian and Exponential Weighting Bandwidth| 0.000000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ArtificialNeuralNetworkClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/ArtificialNeuralNetworkClassification(OpenCV).txt
new file mode 100644
index 0000000..f32058d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ArtificialNeuralNetworkClassification(OpenCV).txt
@@ -0,0 +1,22 @@
+Artificial Neural Network Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterVector|TRAIN_AREAS|Training Areas|2|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
+ParameterNumber|ANN_LAYERS|Number of Layers| 1|None| 3
+ParameterNumber|ANN_NEURONS|Number of Neurons| 1|None| 3
+ParameterNumber|ANN_MAXITER|Maximum Number of Iterations| 1|None| 300
+ParameterNumber|ANN_EPSILON|Error Change (Epsilon)| 0.000000|None| 0.000000
+ParameterSelection|ANN_ACTIVATION|Activation Function|[0] Identity;[1] Sigmoid;[2] Gaussian| 1
+ParameterNumber|ANN_ACT_ALPHA|Function's Alpha|None|None| 1.000000
+ParameterNumber|ANN_ACT_BETA|Function's Beta|None|None| 1.000000
+ParameterSelection|ANN_PROPAGATION|Training Method|[0] resilient propagation;[1] back propagation| 1
+ParameterNumber|ANN_RP_DW0|Initial Update Value|None|None| 0.000000
+ParameterNumber|ANN_RP_DW_PLUS|Increase Factor| 1.010000|None| 1.200000
+ParameterNumber|ANN_RP_DW_MINUS|Decrease Factor| 0.010000| 0.990000| 0.500000
+ParameterNumber|ANN_RP_DW_MIN|Lower Value Update Limit| 0.010000|None| 0.100000
+ParameterNumber|ANN_RP_DW_MAX|Upper Value Update Limit| 1.010000|None| 1.100000
+ParameterNumber|ANN_BP_DW|Weight Gradient Term|None|None| 0.100000
+ParameterNumber|ANN_BP_MOMENT|Moment Term|None|None| 0.100000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Aspect-SlopeGrid.txt b/python/plugins/processing/algs/saga/description/Aspect-SlopeGrid.txt
new file mode 100644
index 0000000..160cafc
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Aspect-SlopeGrid.txt
@@ -0,0 +1,6 @@
+Aspect-Slope Grid
+grid_visualisation
+ParameterRaster|ASPECT|Aspect|False
+ParameterRaster|SLOPE|Slope|False
+OutputRaster|ASPECT_SLOPE|Aspect-Slope
+ParameterTable|LUT|Lookup Table|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AutomatedCloudCoverAssessment.txt b/python/plugins/processing/algs/saga/description/AutomatedCloudCoverAssessment.txt
new file mode 100644
index 0000000..6d9bbf2
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AutomatedCloudCoverAssessment.txt
@@ -0,0 +1,14 @@
+Automated Cloud Cover Assessment
+imagery_tools
+ParameterRaster|BAND2|Landsat Band 2|False
+ParameterRaster|BAND3|Landsat Band 3|False
+ParameterRaster|BAND4|Landsat Band 4|False
+ParameterRaster|BAND5|Landsat Band 5|False
+ParameterRaster|BAND6|Landsat Band 6|False
+OutputRaster|CLOUD|Cloud Cover
+ParameterBoolean|FILTER|Apply post-processing filter to remove small holes|True
+ParameterNumber|B56C|B56 Composite (step 6)|None|None| 225.000000
+ParameterNumber|B45R|B45 Ratio: Desert detection (step 10)|None|None| 1.000000
+ParameterBoolean|CSIG|Always use cloud signature (step 14)|True
+ParameterBoolean|PASS2|Bypass second-pass processing, and merge warm (not ambiguous) and cold clouds|True
+ParameterBoolean|SHADOW|Include a category for cloud shadows|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AverageWithMask1.txt b/python/plugins/processing/algs/saga/description/AverageWithMask1.txt
new file mode 100644
index 0000000..13c570c
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AverageWithMask1.txt
@@ -0,0 +1,8 @@
+Average With Mask 1
+contrib_perego
+ParameterRaster|INPUT|Input|False
+ParameterRaster|MASK|Mask Grid|False
+OutputRaster|RESULT|AWM1 Grid
+ParameterNumber|V|Mask value|None|None| 1.000000
+ParameterNumber|RX|Radius X| 1|None| 1
+ParameterNumber|RY|Radius Y| 1|None| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AverageWithMask2.txt b/python/plugins/processing/algs/saga/description/AverageWithMask2.txt
new file mode 100644
index 0000000..fd260f5
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AverageWithMask2.txt
@@ -0,0 +1,8 @@
+Average With Mask 2
+contrib_perego
+ParameterRaster|INPUT|Input|False
+ParameterRaster|MASK|Mask Grid|False
+OutputRaster|RESULT|AWM2 Grid
+ParameterNumber|V|Mask value|None|None| 1.000000
+ParameterNumber|RX|Radius X| 1|None| 1
+ParameterNumber|RY|Radius Y| 1|None| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AverageWithThereshold1.txt b/python/plugins/processing/algs/saga/description/AverageWithThereshold1.txt
new file mode 100644
index 0000000..346949c
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AverageWithThereshold1.txt
@@ -0,0 +1,7 @@
+Average With Thereshold 1
+contrib_perego
+ParameterRaster|INPUT|Input|False
+OutputRaster|RESULT|AWT Grid
+ParameterNumber|RX|Radius X| 1|None| 1
+ParameterNumber|RY|Radius Y| 1|None| 1
+ParameterNumber|THRESH|Threshold|None|None| 2.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AverageWithThereshold2.txt b/python/plugins/processing/algs/saga/description/AverageWithThereshold2.txt
new file mode 100644
index 0000000..1991ead
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AverageWithThereshold2.txt
@@ -0,0 +1,7 @@
+Average With Thereshold 2
+contrib_perego
+ParameterRaster|INPUT|Input|False
+OutputRaster|RESULT|AWT Grid
+ParameterNumber|RX|Radius X| 1|None| 1
+ParameterNumber|RY|Radius Y| 1|None| 1
+ParameterNumber|THRESH|Threshold|None|None| 2.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/AverageWithThereshold3.txt b/python/plugins/processing/algs/saga/description/AverageWithThereshold3.txt
new file mode 100644
index 0000000..3d17c33
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/AverageWithThereshold3.txt
@@ -0,0 +1,7 @@
+Average With Thereshold 3
+contrib_perego
+ParameterRaster|INPUT|Input|False
+OutputRaster|RESULT|AWT Grid
+ParameterNumber|RX|Radius X| 1|None| 1
+ParameterNumber|RY|Radius Y| 1|None| 1
+ParameterNumber|THRESH|Threshold|None|None| 2.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/BasicTerrainAnalysis.txt b/python/plugins/processing/algs/saga/description/BasicTerrainAnalysis.txt
new file mode 100644
index 0000000..43cd020
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/BasicTerrainAnalysis.txt
@@ -0,0 +1,20 @@
+Basic Terrain Analysis
+ta_compound
+ParameterRaster|ELEVATION|Elevation|False
+OutputRaster|SHADE|Analytical Hillshading
+OutputRaster|SLOPE|Slope
+OutputRaster|ASPECT|Aspect
+OutputRaster|HCURV|Plan Curvature
+OutputRaster|VCURV|Profile Curvature
+OutputRaster|CONVERGENCE|Convergence Index
+OutputRaster|SINKS|Closed Depressions
+OutputRaster|FLOW|Total Catchment Area
+OutputRaster|WETNESS|Topographic Wetness Index
+OutputRaster|LSFACTOR|LS-Factor
+OutputVector|CHANNELS|Channel Network
+OutputVector|BASINS|Drainage Basins
+OutputRaster|CHNL_BASE|Channel Network Base Level
+OutputRaster|CHNL_DIST|Channel Network Distance
+OutputRaster|VALL_DEPTH|Valley Depth
+OutputRaster|RSP|Relative Slope Position
+ParameterNumber|THRESHOLD|Channel Density| 1|None| 5
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/BinaryErosion-Reconstruction.txt b/python/plugins/processing/algs/saga/description/BinaryErosion-Reconstruction.txt
new file mode 100644
index 0000000..29c47b2
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/BinaryErosion-Reconstruction.txt
@@ -0,0 +1,5 @@
+Binary Erosion-Reconstruction
+grid_filter
+ParameterRaster|INPUT_GRID|Input Grid|False
+OutputRaster|OUTPUT_GRID|Output Grid
+ParameterNumber|RADIUS|Filter Size (Radius)|None|None| 3
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/BioclimaticVariables.txt b/python/plugins/processing/algs/saga/description/BioclimaticVariables.txt
new file mode 100644
index 0000000..32ef323
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/BioclimaticVariables.txt
@@ -0,0 +1,26 @@
+Bioclimatic Variables
+climate_tools
+ParameterMultipleInput|TMEAN|Mean Temperature|3|False
+ParameterMultipleInput|TMIN|Minimum Temperature|3|False
+ParameterMultipleInput|TMAX|Maximum Temperature|3|False
+ParameterMultipleInput|P|Precipitation|3|False
+OutputRaster|BIO_01|Annual Mean Temperature
+OutputRaster|BIO_02|Mean Diurnal Range
+OutputRaster|BIO_03|Isothermality
+OutputRaster|BIO_04|Temperature Seasonality
+OutputRaster|BIO_05|Maximum Temperature of Warmest Month
+OutputRaster|BIO_06|Minimum Temperature of Coldest Month
+OutputRaster|BIO_07|Temperature Annual Range
+OutputRaster|BIO_08|Mean Temperature of Wettest Quarter
+OutputRaster|BIO_09|Mean Temperature of Driest Quarter
+OutputRaster|BIO_10|Mean Temperature of Warmest Quarter
+OutputRaster|BIO_11|Mean Temperature of Coldest Quarter
+OutputRaster|BIO_12|Annual Precipitation
+OutputRaster|BIO_13|Precipitation of Wettest Month
+OutputRaster|BIO_14|Precipitation of Driest Month
+OutputRaster|BIO_15|Precipitation Seasonality
+OutputRaster|BIO_16|Precipitation of Wettest Quarter
+OutputRaster|BIO_17|Precipitation of Driest Quarter
+OutputRaster|BIO_18|Precipitation of Warmest Quarter
+OutputRaster|BIO_19|Precipitation of Coldest Quarter
+ParameterSelection|SEASONALITY|Temperature Seasonality|[0] Coefficient of Variation;[1] Standard Deviation| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/BoostingClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/BoostingClassification(OpenCV).txt
new file mode 100644
index 0000000..c39bb62
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/BoostingClassification(OpenCV).txt
@@ -0,0 +1,16 @@
+Boosting Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterVector|TRAIN_AREAS|Training Areas|-1|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
+ParameterNumber|MAX_DEPTH|Maximum Tree Depth| 1|None| 10
+ParameterNumber|MIN_SAMPLES|Minimum Sample Count| 2|None| 2
+ParameterNumber|MAX_CATEGRS|Maximum Categories| 1|None| 10
+ParameterBoolean|1SE_RULE|Use 1SE Rule|True
+ParameterBoolean|TRUNC_PRUNED|Truncate Pruned Trees|True
+ParameterNumber|REG_ACCURACY|Regression Accuracy| 0.000000|None| 0.010000
+ParameterNumber|WEAK_COUNT|Weak Count| 0|None| 100
+ParameterNumber|WGT_TRIM_RATE|Weight Trim Rate| 0.000000| 1.000000| 0.950000
+ParameterSelection|BOOST_TYPE|Boost Type|[0] Discrete AdaBoost;[1] Real AdaBoost;[2] LogitBoost;[3] Gentle AdaBoost| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/CategoricalCoincidence.txt b/python/plugins/processing/algs/saga/description/CategoricalCoincidence.txt
new file mode 100644
index 0000000..159816f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/CategoricalCoincidence.txt
@@ -0,0 +1,8 @@
+Categorical Coincidence
+statistics_grid
+ParameterMultipleInput|GRIDS|Grids|3|False
+OutputRaster|CATEGORIES|Number of Categories
+OutputRaster|COINCIDENCE|Coincidence
+OutputRaster|MAJ_COUNT|Dominance of Majority
+OutputRaster|MAJ_VALUE|Value of Majority
+ParameterNumber|RADIUS|Radius [Cells]| 0|None| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ChangeDataStorage.txt b/python/plugins/processing/algs/saga/description/ChangeDataStorage.txt
new file mode 100644
index 0000000..d52c9ee
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ChangeDataStorage.txt
@@ -0,0 +1,7 @@
+Change Data Storage
+grid_tools
+ParameterRaster|INPUT|Grid|False
+OutputRaster|OUTPUT|Converted Grid
+ParameterSelection|TYPE|Data storage type|[0] bit;[1] unsigned 1 byte integer;[2] signed 1 byte integer;[3] unsigned 2 byte integer;[4] signed 2 byte integer;[5] unsigned 4 byte integer;[6] signed 4 byte integer;[7] 4 byte floating point number;[8] 8 byte floating point number| 7
+ParameterNumber|OFFSET|Offset|None|None| 0.000000
+ParameterNumber|SCALE|Scale|None|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/CloseGapswithStepwiseResampling.txt b/python/plugins/processing/algs/saga/description/CloseGapswithStepwiseResampling.txt
new file mode 100644
index 0000000..e6a8d53
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/CloseGapswithStepwiseResampling.txt
@@ -0,0 +1,10 @@
+Close Gaps with Stepwise Resampling
+grid_tools
+ParameterRaster|INPUT|Grid|False
+ParameterRaster|MASK|Mask|True
+OutputRaster|RESULT|Result
+ParameterSelection|RESAMPLING|Resampling|[0] Nearest Neighbour;[1] Bilinear Interpolation;[2] Bicubic Spline Interpolation;[3] B-Spline Interpolation| 3
+ParameterNumber|GROW|Grow Factor| 1.000000|None| 2.000000
+ParameterBoolean|PYRAMIDS|Use Pyramids|False
+ParameterSelection|START|Start Size|[0] grid cell size;[1] user defined size| 0
+ParameterNumber|START_SIZE|User Defined Size| 0.000000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ClusterAnalysis(Shapes).txt b/python/plugins/processing/algs/saga/description/ClusterAnalysis(Shapes).txt
new file mode 100644
index 0000000..0967d7a
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ClusterAnalysis(Shapes).txt
@@ -0,0 +1,10 @@
+Cluster Analysis (Shapes)
+table_calculus
+ParameterVector|INPUT|Shapes|-1|False
+OutputVector|RESULT|Result
+ParameterTable|FIELDS|Attributes|False
+ParameterTable|CLUSTER|Cluster|False
+ParameterTable|STATISTICS|Statistics|False
+ParameterSelection|METHOD|Method|[0] Iterative Minimum Distance (Forgy 1965);[1] Hill-Climbing (Rubin 1967);[2] Combined Minimum Distance / Hillclimbing| 1
+ParameterNumber|NCLUSTER|Clusters| 2|None| 10
+ParameterBoolean|NORMALISE|Normalise|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ClusterAnalysis.txt b/python/plugins/processing/algs/saga/description/ClusterAnalysis.txt
new file mode 100644
index 0000000..702d24d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ClusterAnalysis.txt
@@ -0,0 +1,10 @@
+Cluster Analysis
+table_calculus
+ParameterTable|INPUT|Table|False
+ParameterTable|RESULT|Result|True
+ParameterTable|FIELDS|Attributes|False
+ParameterTable|CLUSTER|Cluster|False
+ParameterTable|STATISTICS|Statistics|False
+ParameterSelection|METHOD|Method|[0] Iterative Minimum Distance (Forgy 1965);[1] Hill-Climbing (Rubin 1967);[2] Combined Minimum Distance / Hillclimbing| 1
+ParameterNumber|NCLUSTER|Clusters| 2|None| 10
+ParameterBoolean|NORMALISE|Normalise|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ClusterAnalysisforGrids.txt b/python/plugins/processing/algs/saga/description/ClusterAnalysisforGrids.txt
index 0c477e9..08b100e 100644
--- a/python/plugins/processing/algs/saga/description/ClusterAnalysisforGrids.txt
+++ b/python/plugins/processing/algs/saga/description/ClusterAnalysisforGrids.txt
@@ -1,9 +1,11 @@
-Cluster Analysis for Grids
+K-Means Clustering for Grids
imagery_classification
ParameterMultipleInput|GRIDS|Grids|3.0|False
ParameterSelection|METHOD|Method|[0] Iterative Minimum Distance (Forgy 1965);[1] Hill-Climbing (Rubin 1967);[2] Combined Minimum Distance / Hillclimbing
-ParameterNumber|NCLUSTER|Clusters|None|None|5
-ParameterBoolean|NORMALISE |Normalise|True
-ParameterBoolean|OLDVERSION |Old Version|True
+ParameterNumber|NCLUSTER|Clusters|2|None|10
+ParameterNumber|MAXITER|Maximum Iterations|0|None|0
+ParameterBoolean|NORMALISE|Normalise|True
+ParameterBoolean|OLDVERSION|Old Version|False
+ParameterBoolean|UPDATEVIEW|Update View|False
OutputRaster|CLUSTER|Clusters
-OutputTable|STATISTICS|Statistics
+OutputTable|STATISTICS|Statistics
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Concentration.txt b/python/plugins/processing/algs/saga/description/Concentration.txt
new file mode 100644
index 0000000..1751808
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Concentration.txt
@@ -0,0 +1,10 @@
+Concentration
+sim_hydrology
+ParameterRaster|MASK|Mask|False
+ParameterRaster|GRAD|Gradient|False
+OutputRaster|CONC|Concentration
+ParameterNumber|CONC_IN|Inlet Concentration| 0.000000|None| 5.000000
+ParameterNumber|CONC_OUT|Outlet Concentration| 0.000000|None| 3.000000
+ParameterNumber|CONC_E|Concentration Approximation Threshold| 0.000000|None| 0.001000
+ParameterNumber|GRAD_MIN|Minimum Gradient| 0.000000|None| 0.000000
+ParameterSelection|NEIGHBOURS|Neighbourhood|[0] Moore (8);[1] Neumann (4);[2] Optimised| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ConfusionMatrix(PolygonsGrid).txt b/python/plugins/processing/algs/saga/description/ConfusionMatrix(PolygonsGrid).txt
new file mode 100644
index 0000000..640b11d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ConfusionMatrix(PolygonsGrid).txt
@@ -0,0 +1,12 @@
+Confusion Matrix (Polygons / Grid)
+imagery_classification
+ParameterRaster|GRID|Classification|False
+ParameterTable|GRID_LUT|Look-up Table|True
+ParameterTable|GRID_LUT_MIN|Value|False
+ParameterTable|GRID_LUT_MAX|Value (Maximum)|False
+ParameterTable|GRID_LUT_NAM|Name|False
+ParameterVector|POLYGONS|Polygons|-1|False
+ParameterTable|FIELD|Classes|False
+ParameterTable|CONFUSION|Confusion Matrix|False
+ParameterTable|CLASSES|Class Values|False
+ParameterTable|SUMMARY|Summary|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ConfusionMatrix(TwoGrids).txt b/python/plugins/processing/algs/saga/description/ConfusionMatrix(TwoGrids).txt
new file mode 100644
index 0000000..32002a8
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ConfusionMatrix(TwoGrids).txt
@@ -0,0 +1,18 @@
+Confusion Matrix (Two Grids)
+imagery_classification
+ParameterRaster|ONE|Classification 1|False
+ParameterTable|ONE_LUT|Look-up Table|True
+ParameterTable|ONE_LUT_MIN|Value|False
+ParameterTable|ONE_LUT_MAX|Value (Maximum)|False
+ParameterTable|ONE_LUT_NAM|Name|False
+ParameterRaster|TWO|Classification 2|False
+ParameterTable|TWO_LUT|Look-up Table|True
+ParameterTable|TWO_LUT_MIN|Value|False
+ParameterTable|TWO_LUT_MAX|Value (Maximum)|False
+ParameterTable|TWO_LUT_NAM|Name|False
+OutputRaster|COMBINED|Combined Classes
+ParameterBoolean|NOCHANGE|Report Unchanged Classes|True
+ParameterTable|CONFUSION|Confusion Matrix|False
+ParameterSelection|OUTPUT|Output as...|[0] cells;[1] percent;[2] area| 0
+ParameterTable|CLASSES|Class Values|False
+ParameterTable|SUMMARY|Summary|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ConnectivityAnalysis.txt b/python/plugins/processing/algs/saga/description/ConnectivityAnalysis.txt
new file mode 100644
index 0000000..c3a51b4
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ConnectivityAnalysis.txt
@@ -0,0 +1,10 @@
+Connectivity Analysis
+grid_filter
+ParameterRaster|INPUT_GRID|Input Binary Grid|False
+OutputRaster|FILTERED_MASK|Filtered Image
+ParameterBoolean|FILTER|Apply Filter?|True
+ParameterNumber|SIZE|Filter Size (Radius)|None|None| 3
+OutputRaster|SYMBOLIC_IMAGE|Symbolic Image
+OutputVector|OUTLINES|Outlines
+ParameterBoolean|BORDER_PIXEL_CENTERS|Pixel Centers?|False
+ParameterBoolean|REMOVE_MARGINAL_REGIONS|Remove Border Regions?|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ConstantGrid.txt b/python/plugins/processing/algs/saga/description/ConstantGrid.txt
new file mode 100644
index 0000000..c60ba63
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ConstantGrid.txt
@@ -0,0 +1,14 @@
+Constant Grid
+grid_tools
+ParameterString|NAME|Name
+ParameterNumber|CONST|Constant Value|None|None| 1.000000
+ParameterSelection|TYPE|Data Type|[0] bit;[1] unsigned 1 byte integer;[2] signed 1 byte integer;[3] unsigned 2 byte integer;[4] signed 2 byte integer;[5] unsigned 8 byte integer;[6] signed 8 byte integer;[7] 4 byte floating point number;[8] 8 byte floating point number| 7
+ParameterSelection|DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system| 0
+ParameterNumber|USER_SIZE|Cellsize| 0.000000|None| 1.000000
+ParameterNumber|USER_XMIN|Left|None|None| 0.000000
+ParameterNumber|USER_XMAX|Right|None|None| 100.000000
+ParameterNumber|USER_YMIN|Bottom|None|None| 0.000000
+ParameterNumber|USER_YMAX|Top|None|None| 100.000000
+ParameterSelection|USER_FITS|Fit|[0] nodes;[1] cells| 0
+ParameterRaster|TEMPLATE|Target System|True
+OutputRaster|OUT_GRID|Target Grid
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/CoveredDistance.txt b/python/plugins/processing/algs/saga/description/CoveredDistance.txt
new file mode 100644
index 0000000..66e73f6
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/CoveredDistance.txt
@@ -0,0 +1,4 @@
+Covered Distance
+grid_analysis
+ParameterMultipleInput|INPUT|Grids|3|False
+OutputRaster|RESULT|Covered Distance
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/CreatePointGrid.txt b/python/plugins/processing/algs/saga/description/CreatePointGrid.txt
new file mode 100644
index 0000000..92751ef
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/CreatePointGrid.txt
@@ -0,0 +1,8 @@
+Create Point Grid
+shapes_points
+OutputVector|POINTS|Point Grid
+ParameterNumber|X_EXTENT_MIN|X-Extent (Min)|None|None|None
+ParameterNumber|X_EXTENT_MAX|X-Extent (Max)|None|None|None
+ParameterNumber|Y_EXTENT_MIN|Y-Extent (Min)|None|None|None
+ParameterNumber|Y_EXTENT_MAX|Y-Extent (Max)|None|None|None
+ParameterNumber|DIST|Distance|None|None| 100.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/DecisionTreeClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/DecisionTreeClassification(OpenCV).txt
new file mode 100644
index 0000000..9482928
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/DecisionTreeClassification(OpenCV).txt
@@ -0,0 +1,13 @@
+Decision Tree Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterVector|TRAIN_AREAS|Training Areas|-1|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
+ParameterNumber|MAX_DEPTH|Maximum Tree Depth| 1|None| 10
+ParameterNumber|MIN_SAMPLES|Minimum Sample Count| 2|None| 2
+ParameterNumber|MAX_CATEGRS|Maximum Categories| 1|None| 10
+ParameterBoolean|1SE_RULE|Use 1SE Rule|True
+ParameterBoolean|TRUNC_PRUNED|Truncate Pruned Trees|True
+ParameterNumber|REG_ACCURACY|Regression Accuracy| 0.000000|None| 0.010000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Destriping.txt b/python/plugins/processing/algs/saga/description/Destriping.txt
new file mode 100644
index 0000000..00957ae
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Destriping.txt
@@ -0,0 +1,9 @@
+Destriping
+contrib_perego
+ParameterRaster|INPUT|Input|False
+OutputRaster|RESULT3|Destriped Grid
+OutputRaster|RESULT1|Low-pass 1
+OutputRaster|RESULT2|Low-pass 2
+ParameterNumber|ANG|Angle (in degrees)|None|None| 0.000000
+ParameterNumber|R|Radius|None|None| 10.000000
+ParameterNumber|D|Stripes distance|None|None| 2.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/DestripingwithMask.txt b/python/plugins/processing/algs/saga/description/DestripingwithMask.txt
new file mode 100644
index 0000000..87ade0d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/DestripingwithMask.txt
@@ -0,0 +1,14 @@
+Destriping with Mask
+contrib_perego
+ParameterRaster|INPUT|Input|False
+ParameterRaster|MASK|Mask Grid|False
+OutputRaster|RESULT3|Destriped Grid
+OutputRaster|RESULT1|Low-pass 1
+OutputRaster|RESULT2|Low-pass 2
+ParameterNumber|ANG|Angle (in degrees)|None|None| 0.000000
+ParameterNumber|R|Radius|None|None| 20.000000
+ParameterNumber|D|Stripes distance|None|None| 2.000000
+ParameterNumber|MIN|Min|None|None| -10.000000
+ParameterNumber|MAX|Max|None|None| 10.000000
+ParameterNumber|MMIN|Mask Min|None|None| -10000.000000
+ParameterNumber|MMAX|Mask Max|None|None| 10000.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Difference.txt b/python/plugins/processing/algs/saga/description/Difference.txt
new file mode 100644
index 0000000..8f1d07f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Difference.txt
@@ -0,0 +1,6 @@
+Difference
+shapes_polygons
+ParameterVector|A|Layer A|-1|False
+ParameterVector|B|Layer B|-1|False
+OutputVector|RESULT|Difference
+ParameterBoolean|SPLIT|Split Parts|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/DiffusePollutionRisk.txt b/python/plugins/processing/algs/saga/description/DiffusePollutionRisk.txt
new file mode 100644
index 0000000..df79b90
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/DiffusePollutionRisk.txt
@@ -0,0 +1,13 @@
+Diffuse Pollution Risk
+sim_hydrology
+ParameterRaster|DEM|Elevation|False
+ParameterRaster|CHANNEL|Channel Network|True
+ParameterRaster|WEIGHT|Land Cover Weights|True
+ParameterNumber|WEIGHT_DEFAULT|Default| 0.000000|None| 1.000000
+ParameterRaster|RAIN|Rainfall|True
+ParameterNumber|RAIN_DEFAULT|Default| 0.000000|None| 500.000000
+OutputRaster|DELIVERY|Delivery Index
+OutputRaster|RISK_POINT|Locational Risk
+OutputRaster|RISK_DIFFUSE|Diffuse Pollution Risk
+ParameterSelection|METHOD|Flow Direction Algorithm|[0] single;[1] multiple| 1
+ParameterNumber|CHANNEL_START|Channel Initiation Threshold| 1|None| 150
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/DirectionalAverage.txt b/python/plugins/processing/algs/saga/description/DirectionalAverage.txt
new file mode 100644
index 0000000..9a0f6f5
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/DirectionalAverage.txt
@@ -0,0 +1,7 @@
+Directional Average
+contrib_perego
+ParameterRaster|INPUT|Input|False
+OutputRaster|RESULT|Output Grid
+ParameterNumber|ANG|Angle (in degrees)|None|None| 0.000000
+ParameterNumber|R1|Main Radius|None|None| 1.000000
+ParameterNumber|R2|Transversal radius|None|None| 0.500000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Distance(ViGrA).txt b/python/plugins/processing/algs/saga/description/Distance(ViGrA).txt
new file mode 100644
index 0000000..e4d3201
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Distance(ViGrA).txt
@@ -0,0 +1,5 @@
+Distance (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Features|False
+OutputRaster|OUTPUT|Distance
+ParameterSelection|NORM|Type of distance calculation|[0] Chessboard;[1] Manhattan;[2] Euclidean| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/EarthsOrbitalParameters.txt b/python/plugins/processing/algs/saga/description/EarthsOrbitalParameters.txt
new file mode 100644
index 0000000..a086d2b
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/EarthsOrbitalParameters.txt
@@ -0,0 +1,6 @@
+Earth's Orbital Parameters
+climate_tools
+ParameterTable|ORBPAR|Earth's Orbital Parameters|False
+ParameterNumber|START|Start [ka]|None|None| -200.000000
+ParameterNumber|STOP|Stop [ka]|None|None| 2.000000
+ParameterNumber|STEP|Step [ka]| 0.001000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/EdgeDetection(ViGrA).txt b/python/plugins/processing/algs/saga/description/EdgeDetection(ViGrA).txt
new file mode 100644
index 0000000..f67e399
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/EdgeDetection(ViGrA).txt
@@ -0,0 +1,7 @@
+Edge Detection (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Edges
+ParameterSelection|TYPE|Detector type|[0] Canny;[1] Shen-Castan| 0
+ParameterNumber|SCALE|Operator scale| 0.000000|None| 1.000000
+ParameterNumber|THRESHOLD|Gradient threshold| 0.000000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/EnhancedVegetationIndex.txt b/python/plugins/processing/algs/saga/description/EnhancedVegetationIndex.txt
new file mode 100644
index 0000000..b6f39ad
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/EnhancedVegetationIndex.txt
@@ -0,0 +1,10 @@
+Enhanced Vegetation Index
+imagery_tools
+ParameterRaster|BLUE|Blue Reflectance|True
+ParameterRaster|RED|Red Reflectance|False
+ParameterRaster|NIR|Near Infrared Reflectance|False
+OutputRaster|EVI|Enhanced Vegetation Index
+ParameterNumber|GAIN|Gain| 0.000000|None| 2.500000
+ParameterNumber|L|Canopy Background Adjustment| 0.000000|None| 1.000000
+ParameterNumber|CBLUE|Aerosol Resistance Coefficient (Blue)| 0.000000|None| 7.500000
+ParameterNumber|CRED|Aerosol Resistance Coefficient (Red)| 0.000000|None| 6.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/EnumerateTableField.txt b/python/plugins/processing/algs/saga/description/EnumerateTableField.txt
new file mode 100644
index 0000000..03231b6
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/EnumerateTableField.txt
@@ -0,0 +1,5 @@
+Enumerate Table Field
+table_tools
+ParameterTable|INPUT|Input|False
+ParameterTable|FIELD|Attribute|False
+ParameterTable|OUTPUT|Output|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FieldStatistics.txt b/python/plugins/processing/algs/saga/description/FieldStatistics.txt
new file mode 100644
index 0000000..9ba4f3d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FieldStatistics.txt
@@ -0,0 +1,5 @@
+Field Statistics
+table_calculus
+ParameterTable|TABLE|Table|False
+ParameterTable|FIELDS|Attributes|False
+ParameterTable|STATISTICS|Statistics|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FindFieldofExtremeValue.txt b/python/plugins/processing/algs/saga/description/FindFieldofExtremeValue.txt
new file mode 100644
index 0000000..cba0a96
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FindFieldofExtremeValue.txt
@@ -0,0 +1,9 @@
+Find Field of Extreme Value
+table_calculus
+ParameterTable|INPUT|Input|False
+ParameterTable|FIELDS|Attributes|False
+ParameterTable|EXTREME_ID|Attribute|False
+ParameterTable|EXTREME_VALUE|Value|False
+ParameterTable|OUTPUT|Output|True
+ParameterSelection|TYPE|TYPE|[0] minimum;[1] maximum| 1
+ParameterSelection|IDENTIFY|Attribute Identification|[0] name;[1] index| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FourierFilter(ViGrA).txt b/python/plugins/processing/algs/saga/description/FourierFilter(ViGrA).txt
new file mode 100644
index 0000000..1c062d0
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FourierFilter(ViGrA).txt
@@ -0,0 +1,9 @@
+Fourier Filter (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Output
+ParameterNumber|SCALE|Size of smoothing filter| 0.000000|None| 2.000000
+ParameterNumber|POWER|Power|None|None| 0.500000
+ParameterNumber|RANGE_MIN|Range (Min)|None|None|None
+ParameterNumber|RANGE_MAX|Range (Max)|None|None|None
+ParameterSelection|FILTER|Filter|[0] gaussian;[1] power of distance;[2] include range;[3] exclude range| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FourierTransform(RealViGrA).txt b/python/plugins/processing/algs/saga/description/FourierTransform(RealViGrA).txt
new file mode 100644
index 0000000..cea405f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FourierTransform(RealViGrA).txt
@@ -0,0 +1,4 @@
+Fourier Transform (Real, ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Output
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FourierTransform(ViGrA).txt b/python/plugins/processing/algs/saga/description/FourierTransform(ViGrA).txt
new file mode 100644
index 0000000..368f152
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FourierTransform(ViGrA).txt
@@ -0,0 +1,6 @@
+Fourier Transform (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|REAL|Real
+OutputRaster|IMAG|Imaginary
+ParameterBoolean|CENTER|Centered|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FourierTransformInverse(ViGrA).txt b/python/plugins/processing/algs/saga/description/FourierTransformInverse(ViGrA).txt
new file mode 100644
index 0000000..4c93e01
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FourierTransformInverse(ViGrA).txt
@@ -0,0 +1,6 @@
+Fourier Transform Inverse (ViGrA)
+imagery_vigra
+ParameterRaster|REAL|Real|False
+ParameterRaster|IMAG|Imaginary|False
+OutputRaster|OUTPUT|Output
+ParameterBoolean|CENTER|Centered|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FourierTransformation(OpenCV).txt b/python/plugins/processing/algs/saga/description/FourierTransformation(OpenCV).txt
new file mode 100644
index 0000000..15a9526
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FourierTransformation(OpenCV).txt
@@ -0,0 +1,5 @@
+Fourier Transformation (OpenCV)
+imagery_opencv
+ParameterRaster|INPUT|Input|False
+OutputRaster|REAL|Fourier Transformation (Real)
+OutputRaster|IMAG|Fourier Transformation (Imaginary)
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FunctionFit.txt b/python/plugins/processing/algs/saga/description/FunctionFit.txt
new file mode 100644
index 0000000..91f68ec
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FunctionFit.txt
@@ -0,0 +1,9 @@
+Function Fit
+table_calculus
+ParameterTable|SOURCE|Source|False
+ParameterTable|YFIELD|y - Values|False
+ParameterSelection|USE_X|Use x -Values|[0] No;[1] Yes| 0
+ParameterTable|XFIELD|x - Values|False
+ParameterString|FORMEL|Formula
+ParameterNumber|ITER|Iterationen| 1|None| 1000
+ParameterNumber|LAMDA|Max Lamda| 1.000000|None| 10000.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/FuzzyLandformElementClassification.txt b/python/plugins/processing/algs/saga/description/FuzzyLandformElementClassification.txt
new file mode 100644
index 0000000..e9c9532
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/FuzzyLandformElementClassification.txt
@@ -0,0 +1,31 @@
+Fuzzy Landform Element Classification
+ta_morphometry
+ParameterRaster|SLOPE|Slope|False
+ParameterRaster|MINCURV|Minimum Curvature|False
+ParameterRaster|MAXCURV|Maximum Curvature|False
+ParameterRaster|PCURV|Profile Curvature|False
+ParameterRaster|TCURV|Tangential Curvature|False
+OutputRaster|PLAIN|Plain
+OutputRaster|PIT|Pit
+OutputRaster|PEAK|Peak
+OutputRaster|RIDGE|Ridge
+OutputRaster|CHANNEL|Channel
+OutputRaster|SADDLE|Saddle
+OutputRaster|BSLOPE|Back Slope
+OutputRaster|FSLOPE|Foot Slope
+OutputRaster|SSLOPE|Shoulder Slope
+OutputRaster|HOLLOW|Hollow
+OutputRaster|FHOLLOW|Foot Hollow
+OutputRaster|SHOLLOW|Shoulder Hollow
+OutputRaster|SPUR|Spur
+OutputRaster|FSPUR|Foot Spur
+OutputRaster|SSPUR|Shoulder Spur
+OutputRaster|FORM|Landform
+OutputRaster|MEM|Maximum Membership
+OutputRaster|ENTROPY|Entropy
+OutputRaster|CI|Confusion Index
+ParameterSelection|SLOPETODEG|Slope Grid Units|[0] degree;[1] radians| 0
+ParameterNumber|T_SLOPE_MIN|Slope Thresholds [Degree] (Min)|None|None|None
+ParameterNumber|T_SLOPE_MAX|Slope Thresholds [Degree] (Max)|None|None|None
+ParameterNumber|T_CURVE_MIN|Curvature Thresholds [1 / m] (Min)|None|None|None
+ParameterNumber|T_CURVE_MAX|Curvature Thresholds [1 / m] (Max)|None|None|None
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GWRforMultiplePredictors.txt b/python/plugins/processing/algs/saga/description/GWRforMultiplePredictors.txt
new file mode 100644
index 0000000..4f315ed
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GWRforMultiplePredictors.txt
@@ -0,0 +1,16 @@
+GWR for Multiple Predictors
+statistics_regression
+ParameterVector|POINTS|Points|0|False
+ParameterTable|DEPENDENT|Dependent Variable|False
+ParameterTable|PREDICTORS|Predictors|False
+OutputVector|REGRESSION|Regression
+ParameterSelection|DW_WEIGHTING|Weighting Function|[0] no distance weighting;[1] inverse distance to a power;[2] exponential;[3] gaussian weighting| 3
+ParameterNumber|DW_IDW_POWER|Inverse Distance Weighting Power| 0.000000|None| 1.000000
+ParameterBoolean|DW_IDW_OFFSET|Inverse Distance Offset|True
+ParameterNumber|DW_BANDWIDTH|Gaussian and Exponential Weighting Bandwidth| 0.000000|None| 1.000000
+ParameterSelection|SEARCH_RANGE|Search Range|[0] local;[1] global| 0
+ParameterNumber|SEARCH_RADIUS|Maximum Search Distance| 0.000000|None| 1000.000000
+ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points within search distance| 0
+ParameterNumber|SEARCH_POINTS_MIN|Minimum| 1|None| 16
+ParameterNumber|SEARCH_POINTS_MAX|Maximum| 1|None| 20
+ParameterSelection|SEARCH_DIRECTION|Direction|[0] all directions;[1] quadrants| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GWRforSinglePredictor(GriddedModelOutput).txt b/python/plugins/processing/algs/saga/description/GWRforSinglePredictor(GriddedModelOutput).txt
new file mode 100644
index 0000000..40351eb
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GWRforSinglePredictor(GriddedModelOutput).txt
@@ -0,0 +1,27 @@
+GWR for Single Predictor (Gridded Model Output)
+statistics_regression
+ParameterVector|POINTS|Points|0|False
+ParameterTable|DEPENDENT|Dependent Variable|False
+ParameterTable|PREDICTOR|Predictor|False
+ParameterSelection|TARGET_DEFINITION|Target Grid System|[0] user defined;[1] grid or grid system| 0
+ParameterNumber|TARGET_USER_SIZE|Cellsize| 0.000000|None| 1.000000
+ParameterNumber|TARGET_USER_XMIN|Left|None|None| 0.000000
+ParameterNumber|TARGET_USER_XMAX|Right|None|None| 100.000000
+ParameterNumber|TARGET_USER_YMIN|Bottom|None|None| 0.000000
+ParameterNumber|TARGET_USER_YMAX|Top|None|None| 100.000000
+ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells| 0
+ParameterRaster|TARGET_TEMPLATE|Target System|True
+OutputRaster|TARGET_OUT_GRID|Target Grid
+OutputRaster|INTERCEPT|Intercept
+OutputRaster|SLOPE|Slope
+OutputRaster|QUALITY|Quality
+ParameterSelection|DW_WEIGHTING|Weighting Function|[0] no distance weighting;[1] inverse distance to a power;[2] exponential;[3] gaussian weighting| 3
+ParameterNumber|DW_IDW_POWER|Inverse Distance Weighting Power| 0.000000|None| 1.000000
+ParameterBoolean|DW_IDW_OFFSET|Inverse Distance Offset|True
+ParameterNumber|DW_BANDWIDTH|Gaussian and Exponential Weighting Bandwidth| 0.000000|None| 1.000000
+ParameterSelection|SEARCH_RANGE|Search Range|[0] local;[1] global| 0
+ParameterNumber|SEARCH_RADIUS|Maximum Search Distance| 0.000000|None| 1000.000000
+ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points within search distance| 0
+ParameterNumber|SEARCH_POINTS_MIN|Minimum| 1|None| 16
+ParameterNumber|SEARCH_POINTS_MAX|Maximum| 1|None| 20
+ParameterSelection|SEARCH_DIRECTION|Direction|[0] all directions;[1] quadrants| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GWRforSinglePredictorGrid.txt b/python/plugins/processing/algs/saga/description/GWRforSinglePredictorGrid.txt
new file mode 100644
index 0000000..0689e94
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GWRforSinglePredictorGrid.txt
@@ -0,0 +1,20 @@
+GWR for Single Predictor Grid
+statistics_regression
+ParameterVector|POINTS|Points|0|False
+ParameterTable|DEPENDENT|Dependent Variable|False
+OutputVector|RESIDUALS|Residuals
+ParameterRaster|PREDICTOR|Predictor|False
+OutputRaster|REGRESSION|Regression
+OutputRaster|QUALITY|Coefficient of Determination
+OutputRaster|INTERCEPT|Intercept
+OutputRaster|SLOPE|Slope
+ParameterSelection|DW_WEIGHTING|Weighting Function|[0] no distance weighting;[1] inverse distance to a power;[2] exponential;[3] gaussian weighting| 3
+ParameterNumber|DW_IDW_POWER|Inverse Distance Weighting Power| 0.000000|None| 1.000000
+ParameterBoolean|DW_IDW_OFFSET|Inverse Distance Offset|True
+ParameterNumber|DW_BANDWIDTH|Gaussian and Exponential Weighting Bandwidth| 0.000000|None| 1.000000
+ParameterSelection|SEARCH_RANGE|Search Range|[0] local;[1] global| 0
+ParameterNumber|SEARCH_RADIUS|Maximum Search Distance| 0.000000|None| 1000.000000
+ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points within search distance| 0
+ParameterNumber|SEARCH_POINTS_MIN|Minimum| 1|None| 16
+ParameterNumber|SEARCH_POINTS_MAX|Maximum| 1|None| 20
+ParameterSelection|SEARCH_DIRECTION|Direction|[0] all directions;[1] quadrants| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GenerateShapes.txt b/python/plugins/processing/algs/saga/description/GenerateShapes.txt
new file mode 100644
index 0000000..7ea1bf0
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GenerateShapes.txt
@@ -0,0 +1,8 @@
+Generate Shapes
+shapes_tools
+ParameterTable|INPUT|Input|False
+ParameterTable|FIELD_ID|ID|False
+ParameterTable|FIELD_X|X|False
+ParameterTable|FIELD_Y|Y|False
+ParameterSelection|SHAPE_TYPE|Shape Type|[0] Point(s);[1] Line(s);[2] Polygon(s)| 0
+OutputVector|OUTPUT|Output
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GeodesicMorphologicalReconstruction.txt b/python/plugins/processing/algs/saga/description/GeodesicMorphologicalReconstruction.txt
new file mode 100644
index 0000000..c59db3d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GeodesicMorphologicalReconstruction.txt
@@ -0,0 +1,9 @@
+Geodesic Morphological Reconstruction
+grid_filter
+ParameterRaster|INPUT_GRID|Input Grid|False
+OutputRaster|OBJECT_GRID|Object Grid
+OutputRaster|DIFFERENCE_GRID|Difference Input - Reconstruction
+ParameterNumber|SHIFT_VALUE|Shift value|None|None| 5.000000
+ParameterBoolean|BORDER_YES_NO|Preserve 1px border Yes/No|True
+ParameterBoolean|BIN_YES_NO|Create a binary mask Yes/No|True
+ParameterNumber|THRESHOLD|Threshold|None|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GeographicCoordinateGrids.txt b/python/plugins/processing/algs/saga/description/GeographicCoordinateGrids.txt
new file mode 100644
index 0000000..1b56212
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GeographicCoordinateGrids.txt
@@ -0,0 +1,5 @@
+Geographic Coordinate Grids
+pj_proj4
+ParameterRaster|GRID|Grid|False
+OutputRaster|LON|Longitude
+OutputRaster|LAT|Latitude
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GridCombination.txt b/python/plugins/processing/algs/saga/description/GridCombination.txt
new file mode 100644
index 0000000..93c4bfe
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GridCombination.txt
@@ -0,0 +1,12 @@
+GridCombination
+sim_rivflow
+ParameterRaster|INPUT|Gelaendemodell (DTM)|False
+ParameterFile|Folder1|Pfad WaterGap Raster|False|False
+ParameterNumber|sY|Start-Jahr| 1906| 2000| 1990
+ParameterNumber|eY|End-Jahr| 1906| 2000| 1990
+ParameterBoolean|DomW|Domestic Water|True
+ParameterBoolean|ElecW|Electricity Water|True
+ParameterBoolean|LiveW|Livestock Water|True
+ParameterBoolean|ManW|Manufacturing Water|True
+ParameterBoolean|IrrW|Irrigation Water|True
+ParameterSelection|FvA|Flaechenverbrauch-Auswahl (FvA)|[0] Resultierendes Raster ueber WasserENTNAHME erstellen;[1] Resultierendes Raster ueber WasserNUTZUNG erstellen| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/GridStatisticsforPoints.txt b/python/plugins/processing/algs/saga/description/GridStatisticsforPoints.txt
new file mode 100644
index 0000000..f0355fe
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/GridStatisticsforPoints.txt
@@ -0,0 +1,17 @@
+Grid Statistics for Points
+shapes_grid
+ParameterMultipleInput|GRIDS|Grids|3|False
+ParameterVector|POINTS|Points|0|False
+ParameterSelection|KERNEL_TYPE|Kernel Type|[0] square;[1] circle| 0
+ParameterNumber|KERNEL_SIZE|Kernel Size| 1|None| 1
+ParameterSelection|NAMING|Field Naming|[0] grid number;[1] grid name| 1
+OutputVector|RESULT|Statistics
+ParameterBoolean|COUNT|Number of Cells|True
+ParameterBoolean|MIN|Minimum|True
+ParameterBoolean|MAX|Maximum|True
+ParameterBoolean|RANGE|Range|True
+ParameterBoolean|SUM|Sum|True
+ParameterBoolean|MEAN|Mean|True
+ParameterBoolean|VAR|Variance|True
+ParameterBoolean|STDDEV|Standard Deviation|True
+ParameterNumber|QUANTILE|Quantile| 0| 50| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/IMCORR-FeatureTracking.txt b/python/plugins/processing/algs/saga/description/IMCORR-FeatureTracking.txt
new file mode 100644
index 0000000..a00cb8f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/IMCORR-FeatureTracking.txt
@@ -0,0 +1,11 @@
+IMCORR - Feature Tracking
+grid_analysis
+ParameterRaster|GRID_1|Grid 1|False
+ParameterRaster|GRID_2|Grid 2|False
+ParameterRaster|DTM_1|DTM 1|True
+ParameterRaster|DTM_2|DTM 2|True
+OutputVector|CORRPOINTS|Correlated Points
+OutputVector|CORRLINES|Displacement Vector
+ParameterSelection|SEARCH_CHIPSIZE|Search Chip Size (Cells)|[0] 16x16;[1] 32x32;[2] 64x64;[3] 128x128;[4] 256x256| 2
+ParameterSelection|REF_CHIPSIZE|Reference Chip Size (Cells)|[0] 16x16;[1] 32x32;[2] 64x64;[3] 128x128| 1
+ParameterNumber|GRID_SPACING|Grid Spacing (Map Units)| 0.100000| 256.000000| 10.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ISODATAClusteringforGrids.txt b/python/plugins/processing/algs/saga/description/ISODATAClusteringforGrids.txt
new file mode 100644
index 0000000..190539d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ISODATAClusteringforGrids.txt
@@ -0,0 +1,10 @@
+ISODATA Clustering for Grids
+imagery_classification
+ParameterMultipleInput|FEATURES|Features|3|False
+OutputRaster|CLUSTER|Clusters
+ParameterTable|STATISTICS|Statistics|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterNumber|ITERATIONS|Maximum Number of Iterations| 3|None| 20
+ParameterNumber|CLUSTER_INI|Initial Number of Clusters| 0|None| 5
+ParameterNumber|CLUSTER_MAX|Maximum Number of Clusters| 3|None| 16
+ParameterNumber|SAMPLES_MIN|Minimum Number of Samples in a Cluster| 2|None| 5
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Identity.txt b/python/plugins/processing/algs/saga/description/Identity.txt
new file mode 100644
index 0000000..a9f37b4
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Identity.txt
@@ -0,0 +1,6 @@
+Identity
+shapes_polygons
+ParameterVector|A|Layer A|-1|False
+ParameterVector|B|Layer B|-1|False
+OutputVector|RESULT|Identity
+ParameterBoolean|SPLIT|Split Parts|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Intersect.txt b/python/plugins/processing/algs/saga/description/Intersect.txt
new file mode 100644
index 0000000..44cbf41
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Intersect.txt
@@ -0,0 +1,6 @@
+Intersect
+shapes_polygons
+ParameterVector|A|Layer A|-1|False
+ParameterVector|B|Layer B|-1|False
+OutputVector|RESULT|Intersect
+ParameterBoolean|SPLIT|Split Parts|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/InvertGrid.txt b/python/plugins/processing/algs/saga/description/InvertGrid.txt
new file mode 100644
index 0000000..8132386
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/InvertGrid.txt
@@ -0,0 +1,4 @@
+Invert Grid
+grid_tools
+ParameterRaster|GRID|Grid|False
+OutputRaster|INVERSE|Inverse Grid
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/K-MeansClusteringforGrids.txt b/python/plugins/processing/algs/saga/description/K-MeansClusteringforGrids.txt
new file mode 100644
index 0000000..b1bee55
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/K-MeansClusteringforGrids.txt
@@ -0,0 +1,11 @@
+K-Means Clustering for Grids
+imagery_classification
+ParameterMultipleInput|GRIDS|Grids|3|False
+OutputRaster|CLUSTER|Clusters
+ParameterTable|STATISTICS|Statistics|False
+ParameterSelection|METHOD|Method|[0] Iterative Minimum Distance (Forgy 1965);[1] Hill-Climbing (Rubin 1967);[2] Combined Minimum Distance / Hillclimbing| 1
+ParameterNumber|NCLUSTER|Clusters| 2|None| 10
+ParameterNumber|MAXITER|Maximum Iterations| 0|None| 0
+ParameterBoolean|NORMALISE|Normalise|False
+ParameterBoolean|OLDVERSION|Old Version|False
+ParameterBoolean|UPDATEVIEW|Update View|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/K-NearestNeighboursClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/K-NearestNeighboursClassification(OpenCV).txt
new file mode 100644
index 0000000..ef2f972
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/K-NearestNeighboursClassification(OpenCV).txt
@@ -0,0 +1,11 @@
+K-Nearest Neighbours Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterVector|TRAIN_AREAS|Training Areas|-1|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
+ParameterNumber|NEIGHBOURS|Default Number of Neighbours| 1|None| 3
+ParameterSelection|TRAINING|Training Method|[0] classification;[1] regression model| 0
+ParameterSelection|ALGORITHM|Algorithm Type|[0] brute force;[1] KD Tree| 0
+ParameterNumber|EMAX|Parameter for KD Tree implementation| 1|None| 1000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/LS-FactorFieldBased.txt b/python/plugins/processing/algs/saga/description/LS-FactorFieldBased.txt
new file mode 100644
index 0000000..9c59a43
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/LS-FactorFieldBased.txt
@@ -0,0 +1,16 @@
+LS-Factor, Field Based
+ta_hydrology
+ParameterRaster|DEM|Elevation|False
+ParameterVector|FIELDS|Fields|-1|True
+OutputVector|STATISTICS|Field Statistics
+OutputRaster|UPSLOPE_AREA|Upslope Length Factor
+OutputRaster|UPSLOPE_LENGTH|Effective Flow Length
+OutputRaster|UPSLOPE_SLOPE|Upslope Slope
+OutputRaster|LS_FACTOR|LS Factor
+OutputRaster|BALANCE|Sediment Balance
+ParameterSelection|METHOD|LS Calculation|[0] Moore & Nieber 1989;[1] Desmet & Govers 1996;[2] Wischmeier & Smith 1978| 0
+ParameterSelection|METHOD_SLOPE|Type of Slope|[0] local slope;[1] distance weighted average catchment slope| 0
+ParameterSelection|METHOD_AREA|Specific Catchment Area|[0] specific catchment area (contour length simply as cell size);[1] specific catchment area (contour length dependent on aspect);[2] catchment length (square root of catchment area);[3] effective flow length| 1
+ParameterBoolean|STOP_AT_EDGE|Stop at Edge|True
+ParameterNumber|EROSIVITY|Rill/Interrill Erosivity| 0.000000|None| 1.000000
+ParameterSelection|STABILITY|Stability|[0] stable;[1] instable (thawing)| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/LandUseScenarioGenerator.txt b/python/plugins/processing/algs/saga/description/LandUseScenarioGenerator.txt
new file mode 100644
index 0000000..fb8042e
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/LandUseScenarioGenerator.txt
@@ -0,0 +1,8 @@
+Land Use Scenario Generator
+shapes_tools
+ParameterVector|FIELDS|Fields|-1|False
+ParameterTable|FIELD_ID|Field Identifier|False
+OutputVector|SCENARIO|Land Use Scenario
+ParameterSelection|OUTPUT|Output of...|[0] Identifier;[1] Name| 0
+ParameterTable|STATISTICS|Crop Statistics|False
+ParameterTable|KNOWN_CROPS|Known Crops|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/LineSmoothing.txt b/python/plugins/processing/algs/saga/description/LineSmoothing.txt
new file mode 100644
index 0000000..3fd1e79
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/LineSmoothing.txt
@@ -0,0 +1,9 @@
+Line Smoothing
+shapes_lines
+ParameterVector|LINES_IN|Lines|1|False
+OutputVector|LINES_OUT|Smoothed Lines
+ParameterSelection|METHOD|Method|[0] basic SIA model;[1] improved SIA model;[2] Gaussian Filtering| 2
+ParameterNumber|SENSITIVITY|Sensitivity| 1|None| 3
+ParameterNumber|ITERATIONS|Iterations| 1|None| 10
+ParameterNumber|PRESERVATION|Preservation| 1.000000|None| 10.000000
+ParameterNumber|SIGMA|Sigma| 0.500000|None| 2.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MaximumEntropyPresencePrediction.txt b/python/plugins/processing/algs/saga/description/MaximumEntropyPresencePrediction.txt
new file mode 100644
index 0000000..44eac6e
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MaximumEntropyPresencePrediction.txt
@@ -0,0 +1,18 @@
+Maximum Entropy Presence Prediction
+imagery_maxent
+ParameterVector|PRESENCE|Presence Data|-1|False
+ParameterMultipleInput|FEATURES_NUM|Numerical Features|3|True
+ParameterMultipleInput|FEATURES_CAT|Categorical Features|3|True
+OutputRaster|PREDICTION|Presence Prediction
+OutputRaster|PROBABILITY|Presence Probability
+ParameterNumber|BACKGROUND|Background Sample Density [Percent]| 0.000000| 100.000000| 1.000000
+ParameterSelection|METHOD|Method|[0] Yoshimasa Tsuruoka;[1] Dekang Lin| 0
+ParameterFile|YT_FILE_LOAD|Load from File...|False|False
+ParameterFile|YT_FILE_SAVE|Save to File...|False|False
+ParameterSelection|YT_REGUL|Regularization|[0] none;[1] L1;[2] L2| 1
+ParameterNumber|YT_REGUL_VAL|Regularization Factor| 0.000000|None| 1.000000
+ParameterBoolean|YT_NUMASREAL|Real-valued Numerical Features|True
+ParameterNumber|DL_ALPHA|Alpha|None|None| 0.100000
+ParameterNumber|DL_THRESHOLD|Threshold| 0.000000|None| 0.000000
+ParameterNumber|DL_ITERATIONS|Maximum Iterations| 1|None| 100
+ParameterNumber|NUM_CLASSES|Number of Numeric Value Classes| 1|None| 32
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MaximumFlowPathLength.txt b/python/plugins/processing/algs/saga/description/MaximumFlowPathLength.txt
new file mode 100644
index 0000000..d515f14
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MaximumFlowPathLength.txt
@@ -0,0 +1,6 @@
+Maximum Flow Path Length
+ta_hydrology
+ParameterRaster|ELEVATION|Elevation|False
+ParameterRaster|WEIGHTS|Weights|True
+OutputRaster|DISTANCE|Flow Path Length
+ParameterSelection|DIRECTION|Direction of Measurement|[0] downstream;[1] upstream| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MeltonRuggednessNumber.txt b/python/plugins/processing/algs/saga/description/MeltonRuggednessNumber.txt
new file mode 100644
index 0000000..397662a
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MeltonRuggednessNumber.txt
@@ -0,0 +1,6 @@
+Melton Ruggedness Number
+ta_hydrology
+ParameterRaster|DEM|Elevation|False
+OutputRaster|AREA|Catchment Area
+OutputRaster|ZMAX|Maximum Height
+OutputRaster|MRN|Melton Ruggedness Number
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MeshDenoise.txt b/python/plugins/processing/algs/saga/description/MeshDenoise.txt
new file mode 100644
index 0000000..7a2e014
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MeshDenoise.txt
@@ -0,0 +1,9 @@
+Mesh Denoise
+grid_filter
+ParameterRaster|INPUT|Grid|False
+OutputRaster|OUTPUT|Denoised Grid
+ParameterNumber|SIGMA|Threshold| 0.000000| 1.000000| 0.900000
+ParameterNumber|ITER|Number of Iterations for Normal Updating| 1|None| 5
+ParameterNumber|VITER|Number of Iterations for Vertex Updating| 1|None| 50
+ParameterSelection|NB_CV|Common Edge Type of Face Neighbourhood|[0] Common Vertex;[1] Common Edge| 0
+ParameterBoolean|ZONLY|Only Z-Direction Position is Updated|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MirrorGrid.txt b/python/plugins/processing/algs/saga/description/MirrorGrid.txt
new file mode 100644
index 0000000..7a284fb
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MirrorGrid.txt
@@ -0,0 +1,5 @@
+Mirror Grid
+grid_tools
+ParameterRaster|GRID|Grid|False
+OutputRaster|MIRROR|Mirror Grid
+ParameterSelection|METHOD|Method|[0] horizontally;[1] vertically;[2] both| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ModifedQuadraticShepard.txt b/python/plugins/processing/algs/saga/description/ModifedQuadraticShepard.txt
new file mode 100644
index 0000000..f61ade9
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ModifedQuadraticShepard.txt
@@ -0,0 +1,12 @@
+Modifed Quadratic Shepard
+grid_gridding
+ParameterVector|SHAPES|Points|-1|False
+ParameterTable|FIELD|Attribute|False
+Hardcoded|-TARGET_DEFINITION 0
+Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ParameterNumber|TARGET_USER_SIZE|Cellsize|0.000000|None|1.000000
+ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells| 0
+ParameterRaster|TARGET_TEMPLATE|Target System|True
+OutputRaster|TARGET_OUT_GRID|Target Grid
+ParameterNumber|QUADRATIC_NEIGHBORS|Quadratic Neighbors| 5|None| 13
+ParameterNumber|WEIGHTING_NEIGHBORS|Weighting Neighbors| 3|None| 19
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MonthlyGlobalbyLatitude.txt b/python/plugins/processing/algs/saga/description/MonthlyGlobalbyLatitude.txt
new file mode 100644
index 0000000..f93cdbb
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MonthlyGlobalbyLatitude.txt
@@ -0,0 +1,7 @@
+Monthly Global by Latitude
+climate_tools
+ParameterTable|SOLARRAD|Solar Radiation|False
+ParameterTable|ALBEDO|Albedo|True
+ParameterTable|FIELD|Field|False
+ParameterNumber|YEAR|Year [ka]|None|None| 2.000000
+ParameterNumber|DLAT|Latitude Increment [Degree]| 1| 90| 5
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MorphologicalFilter(OpenCV).txt b/python/plugins/processing/algs/saga/description/MorphologicalFilter(OpenCV).txt
new file mode 100644
index 0000000..aae6573
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MorphologicalFilter(OpenCV).txt
@@ -0,0 +1,8 @@
+Morphological Filter (OpenCV)
+imagery_opencv
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Output
+ParameterSelection|TYPE|Operation|[0] dilation;[1] erosion;[2] opening;[3] closing;[4] morpological gradient;[5] top hat;[6] black hat| 0
+ParameterSelection|SHAPE|Element Shape|[0] ellipse;[1] rectangle;[2] cross| 0
+ParameterNumber|RADIUS|Radius (cells)| 0|None| 1
+ParameterNumber|ITERATIONS|Iterations| 1|None| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MorphologicalFilter(ViGrA).txt b/python/plugins/processing/algs/saga/description/MorphologicalFilter(ViGrA).txt
new file mode 100644
index 0000000..a0bb3b0
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MorphologicalFilter(ViGrA).txt
@@ -0,0 +1,8 @@
+Morphological Filter (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Output
+ParameterSelection|TYPE|Operation|[0] Dilation;[1] Erosion;[2] Median;[3] User defined rank| 0
+ParameterNumber|RADIUS|Radius (cells)| 0|None| 1
+ParameterNumber|RANK|User defined rank| 0.000000| 1.000000| 0.500000
+ParameterBoolean|RESCALE|Rescale Values (0-255)|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MorphometricFeatures.txt b/python/plugins/processing/algs/saga/description/MorphometricFeatures.txt
new file mode 100644
index 0000000..54fe3c1
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MorphometricFeatures.txt
@@ -0,0 +1,19 @@
+Morphometric Features
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+OutputRaster|FEATURES|Morphometric Features
+OutputRaster|ELEVATION|Generalized Surface
+OutputRaster|SLOPE|Slope
+OutputRaster|ASPECT|Aspect
+OutputRaster|PROFC|Profile Curvature
+OutputRaster|PLANC|Plan Curvature
+OutputRaster|LONGC|Longitudinal Curvature
+OutputRaster|CROSC|Cross-Sectional Curvature
+OutputRaster|MAXIC|Maximum Curvature
+OutputRaster|MINIC|Minimum Curvature
+ParameterNumber|SIZE|Scale Radius (Cells)| 1|None| 5
+ParameterNumber|TOL_SLOPE|Slope Tolerance|None|None| 1.000000
+ParameterNumber|TOL_CURVE|Curvature Tolerance|None|None| 0.000100
+ParameterNumber|EXPONENT|Distance Weighting Exponent| 0.000000| 4.000000| 0.000000
+ParameterNumber|ZSCALE|Vertical Scaling|None|None| 1.000000
+ParameterBoolean|CONSTRAIN|Constrain|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Mosaicking.txt b/python/plugins/processing/algs/saga/description/Mosaicking.txt
index 16f0439..b956b82 100644
--- a/python/plugins/processing/algs/saga/description/Mosaicking.txt
+++ b/python/plugins/processing/algs/saga/description/Mosaicking.txt
@@ -4,7 +4,7 @@ AllowUnmatching
ParameterMultipleInput|GRIDS|Input Grids|3|False
ParameterString|NAME|Name|Mosaic
ParameterSelection|TYPE|Preferred data storage type|[0] 1 bit;[1] 1 byte unsigned integer;[2] 1 byte signed integer;[3] 2 byte unsigned integer;[4] 2 byte signed integer;[5] 4 byte unsigned integer;[6] 4 byte signed integer;[7] 4 byte floating point;[8] 8 byte floating point|7
-ParameterSelection|INTERPOL|Interpolation|[0] Nearest Neighbor;[1] Bilinear Interpolation;[2] Inverse Distance Interpolation;[3] Bicubic Spline Interpolation;[4] B-Spline Interpolation|0
+ParameterSelection|RESAMPLING|Interpolation|[0] Nearest Neighbor;[1] Bilinear Interpolation;[2] Inverse Distance Interpolation;[3] Bicubic Spline Interpolation;[4] B-Spline Interpolation|0
ParameterSelection|OVERLAP|Overlapping Areas|[0] first;[1] last;[2] minimum;[3] maximum;[4] mean;[5] blend boundary;[6] feathering|1
ParameterNumber|BLEND_DIST|Blending Distance|0.0|None|10.0
ParameterSelection|MATCH|Match|[0] none;[1] regression|0
diff --git a/python/plugins/processing/algs/saga/description/MultipleLinearRegressionAnalysis(Shapes).txt b/python/plugins/processing/algs/saga/description/MultipleLinearRegressionAnalysis(Shapes).txt
new file mode 100644
index 0000000..69ff500
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MultipleLinearRegressionAnalysis(Shapes).txt
@@ -0,0 +1,12 @@
+Multiple Linear Regression Analysis (Shapes)
+statistics_regression
+ParameterVector|TABLE|Shapes|-1|False
+OutputVector|RESULTS|Results
+ParameterTable|DEPENDENT|Dependent Variable|False
+ParameterTable|INFO_COEFF|Details: Coefficients|True
+ParameterTable|INFO_MODEL|Details: Model|True
+ParameterTable|INFO_STEPS|Details: Steps|True
+ParameterSelection|METHOD|Method|[0] include all;[1] forward;[2] backward;[3] stepwise| 3
+ParameterNumber|P_VALUE|Significance Level| 0.000000| 100.000000| 5.000000
+ParameterSelection|CROSSVAL|Cross Validation|[0] none;[1] leave one out;[2] 2-fold;[3] k-fold| 0
+ParameterNumber|CROSSVAL_K|Cross Validation Subsamples| 2|None| 10
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MultipleLinearRegressionAnalysis.txt b/python/plugins/processing/algs/saga/description/MultipleLinearRegressionAnalysis.txt
new file mode 100644
index 0000000..157ec8f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MultipleLinearRegressionAnalysis.txt
@@ -0,0 +1,12 @@
+Multiple Linear Regression Analysis
+statistics_regression
+ParameterTable|TABLE|Table|False
+ParameterTable|RESULTS|Results|True
+ParameterTable|DEPENDENT|Dependent Variable|False
+ParameterTable|INFO_COEFF|Details: Coefficients|True
+ParameterTable|INFO_MODEL|Details: Model|True
+ParameterTable|INFO_STEPS|Details: Steps|True
+ParameterSelection|METHOD|Method|[0] include all;[1] forward;[2] backward;[3] stepwise| 3
+ParameterNumber|P_VALUE|Significance Level| 0.000000| 100.000000| 5.000000
+ParameterSelection|CROSSVAL|Cross Validation|[0] none;[1] leave one out;[2] 2-fold;[3] k-fold| 0
+ParameterNumber|CROSSVAL_K|Cross Validation Subsamples| 2|None| 10
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MultipleRegressionAnalysis(GridandPredictorGrids).txt b/python/plugins/processing/algs/saga/description/MultipleRegressionAnalysis(GridandPredictorGrids).txt
new file mode 100644
index 0000000..f837ab9
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MultipleRegressionAnalysis(GridandPredictorGrids).txt
@@ -0,0 +1,16 @@
+Multiple Regression Analysis (Grid and Predictor Grids)
+statistics_regression
+ParameterRaster|DEPENDENT|Dependent Variable|False
+ParameterMultipleInput|PREDICTORS|Predictors|3|False
+OutputRaster|REGRESSION|Regression
+OutputRaster|RESIDUALS|Residuals
+ParameterTable|INFO_COEFF|Details: Coefficients|True
+ParameterTable|INFO_MODEL|Details: Model|True
+ParameterTable|INFO_STEPS|Details: Steps|True
+ParameterSelection|RESAMPLING|Resampling|[0] Nearest Neighbour;[1] Bilinear Interpolation;[2] Bicubic Spline Interpolation;[3] B-Spline Interpolation| 3
+ParameterBoolean|COORD_X|Include X Coordinate|False
+ParameterBoolean|COORD_Y|Include Y Coordinate|False
+ParameterSelection|METHOD|Method|[0] include all;[1] forward;[2] backward;[3] stepwise| 3
+ParameterNumber|P_VALUE|Significance Level| 0.000000| 100.000000| 5.000000
+ParameterSelection|CROSSVAL|Cross Validation|[0] none;[1] leave one out;[2] 2-fold;[3] k-fold| 0
+ParameterNumber|CROSSVAL_K|Cross Validation Subsamples| 2|None| 10
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/MultipleRegressionAnalysis(PointsandPredictorGrids).txt b/python/plugins/processing/algs/saga/description/MultipleRegressionAnalysis(PointsandPredictorGrids).txt
new file mode 100644
index 0000000..8dd6acb
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/MultipleRegressionAnalysis(PointsandPredictorGrids).txt
@@ -0,0 +1,20 @@
+Multiple Regression Analysis (Points and Predictor Grids)
+statistics_regression
+ParameterMultipleInput|PREDICTORS|Predictors|3|False
+ParameterVector|POINTS|Points|-1|False
+ParameterTable|ATTRIBUTE|Dependent Variable|False
+ParameterTable|INFO_COEFF|Details: Coefficients|True
+ParameterTable|INFO_MODEL|Details: Model|True
+ParameterTable|INFO_STEPS|Details: Steps|True
+OutputVector|RESIDUALS|Residuals
+OutputRaster|REGRESSION|Regression
+OutputRaster|REGRESCORR|Regression with Residual Correction
+ParameterSelection|RESAMPLING|Resampling|[0] Nearest Neighbour;[1] Bilinear Interpolation;[2] Bicubic Spline Interpolation;[3] B-Spline Interpolation| 3
+ParameterBoolean|COORD_X|Include X Coordinate|False
+ParameterBoolean|COORD_Y|Include Y Coordinate|False
+ParameterBoolean|INTERCEPT|Intercept|True
+ParameterSelection|METHOD|Method|[0] include all;[1] forward;[2] backward;[3] stepwise| 3
+ParameterNumber|P_VALUE|Significance Level| 0.000000| 100.000000| 5.000000
+ParameterSelection|CROSSVAL|Cross Validation|[0] none;[1] leave one out;[2] 2-fold;[3] k-fold| 0
+ParameterNumber|CROSSVAL_K|Cross Validation Subsamples| 2|None| 10
+ParameterSelection|RESIDUAL_COR|Residual Interpolation|[0] Multleve B-Spline Interpolation;[1] Inverse Distance Weighted| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/NormalBayesClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/NormalBayesClassification(OpenCV).txt
new file mode 100644
index 0000000..4541874
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/NormalBayesClassification(OpenCV).txt
@@ -0,0 +1,8 @@
+Normal Bayes Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+OutputRaster|PROBABILITY|Probability
+ParameterVector|TRAIN_AREAS|Training Areas|-1|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/PET(afterHargreavesGrid).txt b/python/plugins/processing/algs/saga/description/PET(afterHargreavesGrid).txt
new file mode 100644
index 0000000..26427f0
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/PET(afterHargreavesGrid).txt
@@ -0,0 +1,10 @@
+PET (after Hargreaves, Grid)
+climate_tools
+ParameterRaster|T|Mean Temperature|False
+ParameterRaster|T_MIN|Minimum Temperature|False
+ParameterRaster|T_MAX|Maximum Temperature|False
+OutputRaster|PET|Potential Evapotranspiration
+ParameterNumber|LAT|Latitude [Degree]| -90.000000| 90.000000| 53.000000
+ParameterSelection|TIME|Time|[0] day;[1] month| 0
+ParameterSelection|MONTH|Month|[0] January;[1] February;[2] March;[3] April;[4] May;[5] June;[6] July;[7] August;[8] September;[9] October;[10] November;[11] December| 5
+ParameterNumber|DAY|Day of Month| 1| 31| 30
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/PET(afterHargreavesTable).txt b/python/plugins/processing/algs/saga/description/PET(afterHargreavesTable).txt
new file mode 100644
index 0000000..5ec8e76
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/PET(afterHargreavesTable).txt
@@ -0,0 +1,8 @@
+PET (after Hargreaves, Table)
+climate_tools
+ParameterTable|TABLE|Data|False
+ParameterTable|JD|Julian Day|False
+ParameterTable|T|Mean Temperature|False
+ParameterTable|T_MIN|Minimum Temperature|False
+ParameterTable|T_MAX|Maximum Temperature|False
+ParameterNumber|LAT|Latitude| -90.000000| 90.000000| 53.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/PointDistances.txt b/python/plugins/processing/algs/saga/description/PointDistances.txt
new file mode 100644
index 0000000..ed9c071
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/PointDistances.txt
@@ -0,0 +1,9 @@
+Point Distances
+shapes_points
+ParameterVector|POINTS|Points|0|False
+ParameterTable|ID_POINTS|Identifier|False
+ParameterVector|NEAR|Near Points|-1|True
+ParameterTable|ID_NEAR|Identifier|False
+ParameterTable|DISTANCES|Distances|False
+ParameterSelection|FORMAT|Output Format|[0] complete input times near points matrix;[1] each pair with a single record| 1
+ParameterNumber|MAX_DIST|Maximum Distance| 0.000000|None| 0.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/PolygonSelf-Intersection.txt b/python/plugins/processing/algs/saga/description/PolygonSelf-Intersection.txt
new file mode 100644
index 0000000..4ed096c
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/PolygonSelf-Intersection.txt
@@ -0,0 +1,5 @@
+Polygon Self-Intersection
+shapes_polygons
+ParameterVector|POLYGONS|Polygons|-1|False
+ParameterTable|ID|Identifier|False
+OutputVector|INTERSECT|Intersection
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/RandomForestClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/RandomForestClassification(OpenCV).txt
new file mode 100644
index 0000000..5a0c1a0
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/RandomForestClassification(OpenCV).txt
@@ -0,0 +1,14 @@
+Random Forest Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterVector|TRAIN_AREAS|Training Areas|-1|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
+ParameterNumber|MAX_DEPTH|Maximum Tree Depth| 1|None| 10
+ParameterNumber|MIN_SAMPLES|Minimum Sample Count| 2|None| 2
+ParameterNumber|MAX_CATEGRS|Maximum Categories| 1|None| 10
+ParameterBoolean|1SE_RULE|Use 1SE Rule|True
+ParameterBoolean|TRUNC_PRUNED|Truncate Pruned Trees|True
+ParameterNumber|REG_ACCURACY|Regression Accuracy| 0.000000|None| 0.010000
+ParameterNumber|ACTIVE_VARS|Active Variable Count| 0|None| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/RandomForestPresencePrediction(ViGrA).txt b/python/plugins/processing/algs/saga/description/RandomForestPresencePrediction(ViGrA).txt
new file mode 100644
index 0000000..ec6bf74
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/RandomForestPresencePrediction(ViGrA).txt
@@ -0,0 +1,20 @@
+Random Forest Presence Prediction (ViGrA)
+imagery_vigra
+ParameterMultipleInput|FEATURES|Features|3|False
+OutputRaster|PREDICTION|Presence Prediction
+OutputRaster|PROBABILITY|Presence Probability
+ParameterVector|PRESENCE|Presence Data|-1|False
+ParameterNumber|BACKGROUND|Background Sample Density [Percent]| 0.000000| 100.000000| 1.000000
+ParameterBoolean|DO_MRMR|Minimum Redundancy Feature Selection|False
+ParameterNumber|mRMR_NFEATURES|Number of Features| 1|None| 50
+ParameterBoolean|mRMR_DISCRETIZE|Discretization|True
+ParameterNumber|mRMR_THRESHOLD|Discretization Threshold| 0.000000|None| 1.000000
+ParameterSelection|mRMR_METHOD|Selection Method|[0] Mutual Information Difference (MID);[1] Mutual Information Quotient (MIQ)| 0
+ParameterFile|RF_IMPORT|Import from File|False|False
+ParameterFile|RF_EXPORT|Export to File|False|False
+ParameterNumber|RF_TREE_COUNT|Tree Count| 1|None| 32
+ParameterNumber|RF_TREE_SAMPLES|Samples per Tree| 0.000000| 1.000000| 1.000000
+ParameterBoolean|RF_REPLACE|Sample with Replacement|True
+ParameterNumber|RF_SPLIT_MIN_SIZE|Minimum Node Split Size| 1|None| 1
+ParameterSelection|RF_NODE_FEATURES|Features per Node|[0] logarithmic;[1] square root;[2] all| 1
+ParameterSelection|RF_STRATIFICATION|Stratification|[0] none;[1] equal;[2] proportional| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/RegressionAnalysis(PointsandPredictorGrid).txt b/python/plugins/processing/algs/saga/description/RegressionAnalysis(PointsandPredictorGrid).txt
new file mode 100644
index 0000000..6bca4a1
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/RegressionAnalysis(PointsandPredictorGrid).txt
@@ -0,0 +1,9 @@
+Regression Analysis (Points and Predictor Grid)
+statistics_regression
+ParameterRaster|PREDICTOR|Predictor|False
+ParameterVector|POINTS|Points|-1|False
+ParameterTable|ATTRIBUTE|Dependent Variable|False
+OutputRaster|REGRESSION|Regression
+OutputVector|RESIDUAL|Residuals
+ParameterSelection|RESAMPLING|Resampling|[0] Nearest Neighbour;[1] Bilinear Interpolation;[2] Bicubic Spline Interpolation;[3] B-Spline Interpolation| 3
+ParameterSelection|METHOD|Regression Function|[0] Y = a + b * X (linear);[1] Y = a + b / X;[2] Y = a / (b - X);[3] Y = a * X^b (power);[4] Y = a e^(b * X) (exponential);[5] Y = a + b * ln(X) (logarithmic)| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/RegressionKriging.txt b/python/plugins/processing/algs/saga/description/RegressionKriging.txt
new file mode 100644
index 0000000..23551ee
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/RegressionKriging.txt
@@ -0,0 +1,32 @@
+Regression Kriging
+statistics_kriging
+ParameterVector|POINTS|Points|-1|False
+ParameterTable|FIELD|Attribute|False
+ParameterMultipleInput|PREDICTORS|Predictors|3|False
+OutputRaster|REGRESSION|Regression
+OutputRaster|PREDICTION|Prediction
+OutputRaster|RESIDUALS|Residuals
+OutputRaster|VARIANCE|Quality Measure
+ParameterSelection|TQUALITY|Type of Quality Measure|[0] standard deviation;[1] variance| 0
+ParameterBoolean|LOG|Logarithmic Transformation|False
+ParameterBoolean|BLOCK|Block Kriging|False
+ParameterNumber|DBLOCK|Block Size| 0.000000|None| 100.000000
+ParameterNumber|VAR_MAXDIST|Maximum Distance|None|None| -1.000000
+ParameterNumber|VAR_NCLASSES|Lag Distance Classes| 1|None| 100
+ParameterNumber|VAR_NSKIP|Skip| 1|None| 1
+ParameterString|VAR_MODEL|Variogram Model
+ParameterTable|INFO_COEFF|Regression: Coefficients|True
+ParameterTable|INFO_MODEL|Regression: Model|True
+ParameterTable|INFO_STEPS|Regression: Steps|True
+ParameterBoolean|COORD_X|Include X Coordinate|False
+ParameterBoolean|COORD_Y|Include Y Coordinate|False
+ParameterBoolean|INTERCEPT|Intercept|True
+ParameterSelection|METHOD|Method|[0] include all;[1] forward;[2] backward;[3] stepwise| 3
+ParameterNumber|P_VALUE|Significance Level| 0.000000| 100.000000| 5.000000
+ParameterSelection|RESAMPLING|Resampling|[0] Nearest Neighbour;[1] Bilinear Interpolation;[2] Bicubic Spline Interpolation;[3] B-Spline Interpolation| 3
+ParameterSelection|SEARCH_RANGE|Search Range|[0] local;[1] global| 0
+ParameterNumber|SEARCH_RADIUS|Maximum Search Distance| 0.000000|None| 1000.000000
+ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points within search distance| 0
+ParameterNumber|SEARCH_POINTS_MIN|Minimum| 1|None| 16
+ParameterNumber|SEARCH_POINTS_MAX|Maximum| 1|None| 20
+ParameterSelection|SEARCH_DIRECTION|Direction|[0] all directions;[1] quadrants| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ResamplingFilter.txt b/python/plugins/processing/algs/saga/description/ResamplingFilter.txt
new file mode 100644
index 0000000..9c5b1b9
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ResamplingFilter.txt
@@ -0,0 +1,6 @@
+Resampling Filter
+grid_filter
+ParameterRaster|GRID|Grid|False
+OutputRaster|LOPASS|Low Pass Filter
+OutputRaster|HIPASS|High Pass Filter
+ParameterNumber|SCALE|Scale Factor| 1.000000|None| 10.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/RiverBasin.txt b/python/plugins/processing/algs/saga/description/RiverBasin.txt
new file mode 100644
index 0000000..93992cc
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/RiverBasin.txt
@@ -0,0 +1,19 @@
+RiverBasin
+sim_rivflow
+ParameterRaster|INPUT|DTM|False
+ParameterRaster|INPUT2|HGGrid|False
+ParameterRaster|INPUT3|statisches Entnahmeraster|True
+ParameterBoolean|WCons|Anteilige Flaechenwasserentnahme|False
+ParameterSelection|WCons2|Dynamische Flaechenwassernutzung...|[0] ...anteilig aus den Flussrasterzellen;[1] ...anteilig aus Rasterzellen der Teileinzugegebiete| 0
+OutputRaster|OUTPUT2|Grad
+OutputRaster|OUTPUT3|Direc
+OutputRaster|OUTPUT4|HGGrad
+OutputRaster|OUTPUT5|RivSpeed
+OutputRaster|OUTPUT6|Coordinates
+OutputRaster|OUTPUT7|BasinShare
+OutputRaster|OUTPUT8|statWUse
+OutputRaster|OUTPUT9|NumInFlowCells
+ParameterNumber|pCr|Hauptgerinne-Parameter pHG| 0.000000|None| 0.003500
+ParameterNumber|nCr|Hauptgerinne-Speicherkaskade nHG| 1|None| 1
+ParameterBoolean|EnfVmax|Maximal Geschwindigkeit des Hauptgerinnes beruecksichtigen|True
+ParameterNumber|VTresh|Maximalgeschwindigkeit im Hauptgerinne in km/h| 0.000000| 10.000000| 4.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/RiverGridGeneration.txt b/python/plugins/processing/algs/saga/description/RiverGridGeneration.txt
new file mode 100644
index 0000000..1e91a03
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/RiverGridGeneration.txt
@@ -0,0 +1,9 @@
+RiverGridGeneration
+sim_rivflow
+ParameterRaster|INPUT|Gel�ndemodell (DTM)|False
+OutputRaster|OUTPUT|HG Raster
+ParameterNumber|SX|Abflusspfad-Quelle, x-Wert| 0|None| 0
+ParameterNumber|SY|Abflusspfad-Quelle, y-Wert| 0|None| 0
+ParameterNumber|MX|Abflusspfad-M�ndung, x-Wert| 0|None| 0
+ParameterNumber|MY|Abflusspfad-M�ndung, y-Wert| 0|None| 0
+ParameterBoolean|Owrite|Overwrite RiverGridCells|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SVMClassification.txt b/python/plugins/processing/algs/saga/description/SVMClassification.txt
new file mode 100644
index 0000000..358f072
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SVMClassification.txt
@@ -0,0 +1,24 @@
+SVM Classification
+imagery_svm
+ParameterMultipleInput|GRIDS|Grids|3|False
+OutputRaster|CLASSES|Classification
+ParameterSelection|SCALING|Scaling|[0] none;[1] normalize (0-1);[2] standardize| 2
+ParameterBoolean|MESSAGE|Verbose Messages|False
+ParameterSelection|MODEL_SRC|Model Source|[0] create from training areas;[1] restore from file| 0
+ParameterFile|MODEL_LOAD|Restore Model from File|False|False
+ParameterVector|ROI|Training Areas|-1|False
+ParameterTable|ROI_ID|Class Identifier|False
+ParameterFile|MODEL_SAVE|Store Model to File|False|False
+ParameterSelection|SVM_TYPE|SVM Type|[0] C-SVC;[1] nu-SVC;[2] one-class SVM;[3] epsilon-SVR;[4] nu-SVR| 0
+ParameterSelection|KERNEL_TYPE|Kernel Type|[0] linear;[1] polynomial;[2] radial basis function;[3] sigmoid| 2
+ParameterNumber|DEGREE|Degree|None|None| 3
+ParameterNumber|GAMMA|Gamma|None|None| 0.000000
+ParameterNumber|COEF0|coef0|None|None| 0.000000
+ParameterNumber|COST|C|None|None| 1.000000
+ParameterNumber|NU|nu-SVR|None|None| 0.500000
+ParameterNumber|EPS_SVR|SVR Epsilon|None|None| 0.100000
+ParameterNumber|CACHE_SIZE|Cache Size|None|None| 100.000000
+ParameterNumber|EPS|Epsilon|None|None| 0.001000
+ParameterBoolean|SHRINKING|Shrinking|False
+ParameterBoolean|PROBABILITY|Probability Estimates|False
+ParameterNumber|CROSSVAL|Cross Validation| 1|None| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SeededRegionGrowing.txt b/python/plugins/processing/algs/saga/description/SeededRegionGrowing.txt
new file mode 100644
index 0000000..fc6391f
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SeededRegionGrowing.txt
@@ -0,0 +1,15 @@
+Seeded Region Growing
+imagery_segmentation
+ParameterRaster|SEEDS|Seeds|False
+ParameterMultipleInput|FEATURES|Features|3|False
+OutputRaster|SEGMENTS|Segments
+OutputRaster|SIMILARITY|Similarity
+ParameterTable|TABLE|Seeds|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterSelection|NEIGHBOUR|Neighbourhood|[0] 4 (von Neumann);[1] 8 (Moore)| 0
+ParameterSelection|METHOD|Method|[0] feature space and position;[1] feature space| 0
+ParameterNumber|SIG_1|Variance in Feature Space| 0.000000|None| 1.000000
+ParameterNumber|SIG_2|Variance in Position Space| 0.000000|None| 1.000000
+ParameterNumber|THRESHOLD|Similarity Threshold| 0.000000|None| 0.000000
+ParameterBoolean|REFRESH|Refresh|False
+ParameterNumber|LEAFSIZE|Leaf Size (for Speed Optimisation)| 2|None| 256
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SievingClasses.txt b/python/plugins/processing/algs/saga/description/SievingClasses.txt
new file mode 100644
index 0000000..6e17e94
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SievingClasses.txt
@@ -0,0 +1,8 @@
+Sieving Classes
+grid_filter
+ParameterRaster|INPUT|Classes|False
+OutputRaster|OUTPUT|Sieved Classes
+ParameterSelection|MODE|Neighbourhood|[0] Neumann;[1] Moore| 1
+ParameterNumber|THRESHOLD|Minimum Threshold| 2|None| 4
+ParameterSelection|ALL|Class Selection|[0] single class;[1] all classes| 1
+ParameterNumber|CLASS|Class Identifier|None|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SimpleFilterwithinshapes.txt b/python/plugins/processing/algs/saga/description/SimpleFilterwithinshapes.txt
new file mode 100644
index 0000000..95fb15b
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SimpleFilterwithinshapes.txt
@@ -0,0 +1,8 @@
+Simple Filter within shapes
+grid_filter
+ParameterRaster|INPUT|Grid|False
+OutputRaster|RESULT|Filtered Grid
+ParameterVector|SHAPES|Boundaries|-1|False
+ParameterSelection|MODE|Search Mode|[0] Square;[1] Circle| 1
+ParameterSelection|METHOD|Filter|[0] Smooth;[1] Sharpen;[2] Edge| 0
+ParameterNumber|RADIUS|Radius| 1|None| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SimpleKriging.txt b/python/plugins/processing/algs/saga/description/SimpleKriging.txt
new file mode 100644
index 0000000..72a76c9
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SimpleKriging.txt
@@ -0,0 +1,25 @@
+Simple Kriging
+statistics_kriging
+ParameterVector|POINTS|Points|0|False
+ParameterTable|FIELD|Attribute|False
+ParameterSelection|TQUALITY|Type of Quality Measure|[0] standard deviation;[1] variance| 0
+ParameterBoolean|LOG|Logarithmic Transformation|False
+ParameterBoolean|BLOCK|Block Kriging|False
+ParameterNumber|DBLOCK|Block Size| 0.000000|None| 100.000000
+ParameterNumber|VAR_MAXDIST|Maximum Distance|None|None| -1.000000
+ParameterNumber|VAR_NCLASSES|Lag Distance Classes| 1|None| 100
+ParameterNumber|VAR_NSKIP|Skip| 1|None| 1
+ParameterString|VAR_MODEL|Model
+Hardcoded|-TARGET_DEFINITION 0
+Extent TARGET_USER_XMIN TARGET_USER_XMAX TARGET_USER_YMIN TARGET_USER_YMAX
+ParameterNumber|TARGET_USER_SIZE|Cellsize|None|None|100.0
+ParameterSelection|TARGET_USER_FITS|Fit|[0] nodes;[1] cells| 0
+ParameterRaster|TARGET_TEMPLATE|Target System|True
+OutputRaster|PREDICTION|Prediction
+OutputRaster|VARIANCE|Quality Measure
+ParameterSelection|SEARCH_RANGE|Search Range|[0] local;[1] global| 0
+ParameterNumber|SEARCH_RADIUS|Maximum Search Distance| 0.000000|None| 1000.000000
+ParameterSelection|SEARCH_POINTS_ALL|Number of Points|[0] maximum number of nearest points;[1] all points within search distance| 0
+ParameterNumber|SEARCH_POINTS_MIN|Minimum| 1|None| 16
+ParameterNumber|SEARCH_POINTS_MAX|Maximum| 1|None| 20
+ParameterSelection|SEARCH_DIRECTION|Direction|[0] all directions;[1] quadrants| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SingleValueDecomposition(OpenCV).txt b/python/plugins/processing/algs/saga/description/SingleValueDecomposition(OpenCV).txt
new file mode 100644
index 0000000..123c249
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SingleValueDecomposition(OpenCV).txt
@@ -0,0 +1,6 @@
+Single Value Decomposition (OpenCV)
+imagery_opencv
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Output
+ParameterNumber|RANGE_MIN|Range (Min)|None|None|None
+ParameterNumber|RANGE_MAX|Range (Max)|None|None|None
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SlopeLimitedFlowAccumulation.txt b/python/plugins/processing/algs/saga/description/SlopeLimitedFlowAccumulation.txt
new file mode 100644
index 0000000..1e924c8
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SlopeLimitedFlowAccumulation.txt
@@ -0,0 +1,10 @@
+Slope Limited Flow Accumulation
+ta_hydrology
+ParameterRaster|DEM|Elevation|False
+ParameterRaster|WEIGHT|Weight|True
+OutputRaster|FLOW|Flow Accumulation
+ParameterNumber|SLOPE_MIN|Slope Minimum| 0.000000|None| 0.000000
+ParameterNumber|SLOPE_MAX|Slope Threshold| 0.000000| 90.000000| 5.000000
+ParameterBoolean|B_FLOW|Use Flow Threshold|False
+ParameterNumber|T_FLOW_MIN|Flow Threshold (Min)|None|None|None
+ParameterNumber|T_FLOW_MAX|Flow Threshold (Max)|None|None|None
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Smoothing(ViGrA).txt b/python/plugins/processing/algs/saga/description/Smoothing(ViGrA).txt
new file mode 100644
index 0000000..94d3f21
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Smoothing(ViGrA).txt
@@ -0,0 +1,7 @@
+Smoothing (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Output
+ParameterSelection|TYPE|Type of smoothing|[0] exponential;[1] nonlinear;[2] gaussian| 0
+ParameterNumber|SCALE|Size of smoothing filter| 0.000000|None| 2.000000
+ParameterNumber|EDGE|Edge threshold for nonlinear smoothing| 0.000000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SnapPointstoGrid.txt b/python/plugins/processing/algs/saga/description/SnapPointstoGrid.txt
new file mode 100644
index 0000000..5a7e348
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SnapPointstoGrid.txt
@@ -0,0 +1,9 @@
+Snap Points to Grid
+shapes_points
+ParameterVector|INPUT|Points|0|False
+ParameterRaster|GRID|Grid|False
+OutputVector|OUTPUT|Result
+OutputVector|MOVES|Moves
+ParameterNumber|DISTANCE|Search Distance (Map Units)| 0.000000|None| 0.000000
+ParameterSelection|SHAPE|Search Shape|[0] circle;[1] square| 0
+ParameterSelection|EXTREME|Extreme|[0] minimum;[1] maximum| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SnapPointstoLines.txt b/python/plugins/processing/algs/saga/description/SnapPointstoLines.txt
new file mode 100644
index 0000000..ece260c
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SnapPointstoLines.txt
@@ -0,0 +1,7 @@
+Snap Points to Lines
+shapes_points
+ParameterVector|INPUT|Points|1|False
+ParameterVector|SNAP|Snap Features|-1|False
+OutputVector|OUTPUT|Result
+OutputVector|MOVES|Moves
+ParameterNumber|DISTANCE|Search Distance| 0.000000|None| 0.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SnapPointstoPoints.txt b/python/plugins/processing/algs/saga/description/SnapPointstoPoints.txt
new file mode 100644
index 0000000..30a60e9
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SnapPointstoPoints.txt
@@ -0,0 +1,7 @@
+Snap Points to Points
+shapes_points
+ParameterVector|INPUT|Points|-1|False
+ParameterVector|SNAP|Snap Features|-1|False
+OutputVector|OUTPUT|Result
+OutputVector|MOVES|Moves
+ParameterNumber|DISTANCE|Search Distance| 0.000000|None| 0.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SplitLinesatPoints.txt b/python/plugins/processing/algs/saga/description/SplitLinesatPoints.txt
new file mode 100644
index 0000000..f9740a1
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SplitLinesatPoints.txt
@@ -0,0 +1,7 @@
+Split Lines at Points
+shapes_lines
+ParameterVector|LINES|Lines|1|False
+ParameterVector|SPLIT|Split Features|0|False
+OutputVector|INTERSECT|Intersection
+ParameterSelection|OUTPUT|Output|[0] polylines;[1] separate lines| 1
+ParameterNumber|EPSILON|Epsilon|None|None| 0.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SplitLineswithLines.txt b/python/plugins/processing/algs/saga/description/SplitLineswithLines.txt
new file mode 100644
index 0000000..1a96df2
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SplitLineswithLines.txt
@@ -0,0 +1,6 @@
+Split Lines with Lines
+shapes_lines
+ParameterVector|LINES|Lines|1|False
+ParameterVector|SPLIT|Split Features|1|False
+OutputVector|INTERSECT|Intersection
+ParameterSelection|OUTPUT|Output|[0] polylines;[1] separate lines| 1
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SupervisedClassificationforGrids.txt b/python/plugins/processing/algs/saga/description/SupervisedClassificationforGrids.txt
new file mode 100644
index 0000000..ba6e0e7
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SupervisedClassificationforGrids.txt
@@ -0,0 +1,21 @@
+Supervised Classification for Grids
+imagery_classification
+ParameterMultipleInput|GRIDS|Features|3|False
+ParameterBoolean|NORMALISE|Normalise|False
+OutputRaster|CLASSES|Classification
+OutputRaster|QUALITY|Quality
+ParameterVector|TRAINING|Training Areas|-1|True
+ParameterTable|TRAINING_CLASS|Class Identifier|False
+ParameterFile|FILE_LOAD|Load Statistics from File...|False|False
+ParameterFile|FILE_SAVE|Save Statistics to File...|False|False
+ParameterSelection|METHOD|Method|[0] Binary Encoding;[1] Parallelepiped;[2] Minimum Distance;[3] Mahalanobis Distance;[4] Maximum Likelihood;[5] Spectral Angle Mapping;[6] Winner Takes All| 2
+ParameterNumber|THRESHOLD_DIST|Distance Threshold| 0.000000|None| 0.000000
+ParameterNumber|THRESHOLD_ANGLE|Spectral Angle Threshold (Degree)| 0.000000| 90.000000| 0.000000
+ParameterNumber|THRESHOLD_PROB|Probability Threshold| 0.000000| 100.000000| 0.000000
+ParameterSelection|RELATIVE_PROB|Probability Reference|[0] absolute;[1] relative| 1
+ParameterBoolean|WTA_0|Binary Encoding|False
+ParameterBoolean|WTA_1|Parallelepiped|False
+ParameterBoolean|WTA_2|Minimum Distance|False
+ParameterBoolean|WTA_3|Mahalanobis Distance|False
+ParameterBoolean|WTA_4|Maximum Likelihood|False
+ParameterBoolean|WTA_5|Spectral Angle Mapping|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SupervisedClassificationforShapes.txt b/python/plugins/processing/algs/saga/description/SupervisedClassificationforShapes.txt
new file mode 100644
index 0000000..fadb3b7
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SupervisedClassificationforShapes.txt
@@ -0,0 +1,20 @@
+Supervised Classification for Shapes
+imagery_classification
+ParameterVector|SHAPES|Shapes|-1|False
+OutputVector|CLASSES|Classification
+ParameterTable|FEATURES|Features|False
+ParameterBoolean|NORMALISE|Normalise|False
+ParameterTable|TRAINING|Training Classes|False
+ParameterFile|FILE_LOAD|Load Statistics from File...|False|False
+ParameterFile|FILE_SAVE|Save Statistics to File...|False|False
+ParameterSelection|METHOD|Method|[0] Binary Encoding;[1] Parallelepiped;[2] Minimum Distance;[3] Mahalanobis Distance;[4] Maximum Likelihood;[5] Spectral Angle Mapping;[6] Winner Takes All| 2
+ParameterNumber|THRESHOLD_DIST|Distance Threshold| 0.000000|None| 0.000000
+ParameterNumber|THRESHOLD_ANGLE|Spectral Angle Threshold (Degree)| 0.000000| 90.000000| 0.000000
+ParameterNumber|THRESHOLD_PROB|Probability Threshold| 0.000000| 100.000000| 0.000000
+ParameterSelection|RELATIVE_PROB|Probability Reference|[0] absolute;[1] relative| 1
+ParameterBoolean|WTA_0|Binary Encoding|False
+ParameterBoolean|WTA_1|Parallelepiped|False
+ParameterBoolean|WTA_2|Minimum Distance|False
+ParameterBoolean|WTA_3|Mahalanobis Distance|False
+ParameterBoolean|WTA_4|Maximum Likelihood|False
+ParameterBoolean|WTA_5|Spectral Angle Mapping|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SupportVectorMachineClassification(OpenCV).txt b/python/plugins/processing/algs/saga/description/SupportVectorMachineClassification(OpenCV).txt
new file mode 100644
index 0000000..5bb5d34
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SupportVectorMachineClassification(OpenCV).txt
@@ -0,0 +1,15 @@
+Support Vector Machine Classification (OpenCV)
+imagery_opencv
+ParameterMultipleInput|FEATURES|Features|3|False
+ParameterBoolean|NORMALIZE|Normalize|False
+ParameterVector|TRAIN_AREAS|Training Areas|-1|False
+ParameterTable|TRAIN_CLASS|Class Identifier|False
+OutputRaster|CLASSES|Classification
+ParameterSelection|SVM_TYPE|SVM Type|[0] c-support vector classification;[1] nu support vector classification;[2] distribution estimation (one class);[3] epsilon support vector regression;[4] nu support vector regression| 0
+ParameterNumber|C|C| 0.000000|None| 1.000000
+ParameterNumber|NU|Nu| 0.000000|None| 0.500000
+ParameterNumber|P|P| 0.000000|None| 0.500000
+ParameterSelection|KERNEL|Kernel Type|[0] linear;[1] polynomial;[2] radial basis function;[3] sigmoid;[4] exponential chi2;[5] histogram intersection| 1
+ParameterNumber|COEF0|Coefficient 0| 0.000000|None| 1.000000
+ParameterNumber|DEGREE|Degree| 0.000000|None| 0.500000
+ParameterNumber|GAMMA|Gamma| 0.000000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SurfaceGradientandConcentration.txt b/python/plugins/processing/algs/saga/description/SurfaceGradientandConcentration.txt
new file mode 100644
index 0000000..da382dd
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SurfaceGradientandConcentration.txt
@@ -0,0 +1,12 @@
+Surface, Gradient and Concentration
+sim_hydrology
+ParameterRaster|MASK|Mask|False
+OutputRaster|SURF|Surface
+OutputRaster|GRAD|Gradient
+OutputRaster|CONC|Concentration
+ParameterNumber|SURF_E|Surface Approximation Threshold| 0.000000|None| 0.001000
+ParameterNumber|CONC_IN|Inlet Concentration| 0.000000|None| 5.000000
+ParameterNumber|CONC_OUT|Outlet Concentration| 0.000000|None| 3.000000
+ParameterNumber|CONC_E|Concentration Approximation Threshold| 0.000000|None| 0.001000
+ParameterNumber|GRAD_MIN|Minimum Gradient| 0.000000|None| 0.000000
+ParameterSelection|NEIGHBOURS|Neighbourhood|[0] Moore (8);[1] Neumann (4);[2] Optimised| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SurfaceandGradient.txt b/python/plugins/processing/algs/saga/description/SurfaceandGradient.txt
new file mode 100644
index 0000000..55aceca
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SurfaceandGradient.txt
@@ -0,0 +1,6 @@
+Surface and Gradient
+sim_hydrology
+ParameterRaster|MASK|Mask|False
+OutputRaster|SURF|Surface
+OutputRaster|GRAD|Gradient
+ParameterNumber|SURF_E|Surface Approximation Threshold| 0.000000|None| 0.001000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/SymmetricalDifference.txt b/python/plugins/processing/algs/saga/description/SymmetricalDifference.txt
new file mode 100644
index 0000000..c68254c
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/SymmetricalDifference.txt
@@ -0,0 +1,6 @@
+Symmetrical Difference
+shapes_polygons
+ParameterVector|A|Layer A|-1|False
+ParameterVector|B|Layer B|-1|False
+OutputVector|RESULT|Symmetrical Difference
+ParameterBoolean|SPLIT|Split Parts|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TCILow.txt b/python/plugins/processing/algs/saga/description/TCILow.txt
new file mode 100644
index 0000000..aa68d2d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TCILow.txt
@@ -0,0 +1,5 @@
+TCI Low
+ta_hydrology
+ParameterRaster|DISTANCE|Vertical Distance to Channel Network|False
+ParameterRaster|TWI|Topographic Wetness Index|False
+OutputRaster|TCILOW|TCI Low
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TasseledCapTransformation.txt b/python/plugins/processing/algs/saga/description/TasseledCapTransformation.txt
new file mode 100644
index 0000000..f659e3e
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TasseledCapTransformation.txt
@@ -0,0 +1,11 @@
+Tasseled Cap Transformation
+imagery_tools
+ParameterRaster|BLUE|Blue (TM 1)|True
+ParameterRaster|RED|Red (TM 2)|False
+ParameterRaster|GREEN|Green (TM 3)|False
+ParameterRaster|NIR|Near Infrared (TM 4)|False
+ParameterRaster|MIR1|Mid Infrared (TM 5)|False
+ParameterRaster|MIR2|Mid Infrared (TM 7)|False
+OutputRaster|BRIGHTNESS|Brightness
+OutputRaster|GREENNESS|Greenness
+OutputRaster|WETNESS|Wetness
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TerrainMapView.txt b/python/plugins/processing/algs/saga/description/TerrainMapView.txt
new file mode 100644
index 0000000..ea3f7f3
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TerrainMapView.txt
@@ -0,0 +1,11 @@
+Terrain Map View
+grid_visualisation
+ParameterRaster|DEM|DEM|False
+OutputRaster|SHADE|Shade
+OutputRaster|OPENNESS|Openness
+OutputRaster|SLOPE|Slope
+OutputVector|CONTOURS|Contours
+ParameterSelection|METHOD|Method|[0] Topography;[1] Morphology| 0
+ParameterNumber|RADIUS|Radial Limit| 0.000000|None| 1000.000000
+ParameterBoolean|CONTOUR_LINES|Contour Lines|True
+ParameterNumber|EQUIDISTANCE|Equidistance| 0.000000|None| 50.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TerrainSurfaceClassification(IwahashiandPike).txt b/python/plugins/processing/algs/saga/description/TerrainSurfaceClassification(IwahashiandPike).txt
new file mode 100644
index 0000000..77891b9
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TerrainSurfaceClassification(IwahashiandPike).txt
@@ -0,0 +1,16 @@
+Terrain Surface Classification (Iwahashi and Pike)
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+ParameterRaster|SLOPE|Slope|True
+ParameterRaster|CONVEXITY|Convexity|True
+ParameterBoolean|CONV_RECALC|Recalculate|False
+ParameterRaster|TEXTURE|Texture|True
+ParameterBoolean|TEXT_RECALC|Recalculate|False
+OutputRaster|LANDFORMS|Landforms
+ParameterSelection|TYPE|Number of Classes|[0] 8;[1] 12;[2] 16| 2
+ParameterNumber|CONV_SCALE|Scale (Cells)| 1|None| 10
+ParameterSelection|CONV_KERNEL|Laplacian Filter Kernel|[0] four-neighbourhood;[1] eight-neihbourhood;[2] eight-neihbourhood (distance based weighting)| 0
+ParameterSelection|CONV_TYPE|Type|[0] convexity;[1] concavity| 0
+ParameterNumber|CONV_EPSILON|Flat Area Threshold| 0.000000|None| 0.000000
+ParameterNumber|TEXT_SCALE|Scale (Cells)| 1|None| 10
+ParameterNumber|TEXT_EPSILON|Flat Area Threshold| 0.000000|None| 1.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TerrainSurfaceConvexity.txt b/python/plugins/processing/algs/saga/description/TerrainSurfaceConvexity.txt
new file mode 100644
index 0000000..83ee89d
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TerrainSurfaceConvexity.txt
@@ -0,0 +1,13 @@
+Terrain Surface Convexity
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+OutputRaster|CONVEXITY|Convexity
+ParameterSelection|KERNEL|Laplacian Filter Kernel|[0] conventional four-neighbourhood;[1] conventional eight-neihbourhood;[2] eight-neihbourhood (distance based weighting)| 0
+ParameterSelection|TYPE|Type|[0] convexity;[1] concavity| 0
+ParameterNumber|EPSILON|Flat Area Threshold| 0.000000|None| 0.000000
+ParameterNumber|SCALE|Scale (Cells)| 1|None| 10
+ParameterSelection|METHOD|Method|[0] counting cells;[1] resampling| 1
+ParameterSelection|DW_WEIGHTING|Weighting Function|[0] no distance weighting;[1] inverse distance to a power;[2] exponential;[3] gaussian weighting| 3
+ParameterNumber|DW_IDW_POWER|Inverse Distance Weighting Power| 0.000000|None| 1.000000
+ParameterBoolean|DW_IDW_OFFSET|Inverse Distance Offset|True
+ParameterNumber|DW_BANDWIDTH|Gaussian and Exponential Weighting Bandwidth| 0.000000|None| 0.700000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TerrainSurfaceTexture.txt b/python/plugins/processing/algs/saga/description/TerrainSurfaceTexture.txt
new file mode 100644
index 0000000..562d638
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TerrainSurfaceTexture.txt
@@ -0,0 +1,11 @@
+Terrain Surface Texture
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+OutputRaster|TEXTURE|Texture
+ParameterNumber|EPSILON|Flat Area Threshold| 0.000000|None| 1.000000
+ParameterNumber|SCALE|Scale (Cells)| 1|None| 10
+ParameterSelection|METHOD|Method|[0] counting cells;[1] resampling| 1
+ParameterSelection|DW_WEIGHTING|Weighting Function|[0] no distance weighting;[1] inverse distance to a power;[2] exponential;[3] gaussian weighting| 3
+ParameterNumber|DW_IDW_POWER|Inverse Distance Weighting Power| 0.000000|None| 1.000000
+ParameterBoolean|DW_IDW_OFFSET|Inverse Distance Offset|True
+ParameterNumber|DW_BANDWIDTH|Gaussian and Exponential Weighting Bandwidth| 0.000000|None| 0.700000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ThiessenPolygons.txt b/python/plugins/processing/algs/saga/description/ThiessenPolygons.txt
new file mode 100644
index 0000000..b0eabe7
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ThiessenPolygons.txt
@@ -0,0 +1,5 @@
+Thiessen Polygons
+shapes_points
+ParameterVector|POINTS|Points|-1|False
+OutputVector|POLYGONS|Polygons
+ParameterNumber|FRAME|Frame Size| 0.000000|None| 10.000000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TopofAtmosphereReflectance.txt b/python/plugins/processing/algs/saga/description/TopofAtmosphereReflectance.txt
new file mode 100644
index 0000000..702f0b8
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TopofAtmosphereReflectance.txt
@@ -0,0 +1,69 @@
+Top of Atmosphere Reflectance
+imagery_tools
+ParameterRaster|DN_MSS01|DN Band 1|True
+ParameterRaster|DN_MSS02|DN Band 2|True
+ParameterRaster|DN_MSS03|DN Band 3|True
+ParameterRaster|DN_MSS04|DN Band 4|True
+OutputRaster|RF_MSS01|Reflectance Band 1
+OutputRaster|RF_MSS02|Reflectance Band 2
+OutputRaster|RF_MSS03|Reflectance Band 3
+OutputRaster|RF_MSS04|Reflectance Band 4
+ParameterRaster|DN_ETM01|DN Band 1|True
+ParameterRaster|DN_ETM02|DN Band 2|True
+ParameterRaster|DN_ETM03|DN Band 3|True
+ParameterRaster|DN_ETM04|DN Band 4|True
+ParameterRaster|DN_ETM05|DN Band 5|True
+ParameterRaster|DN_ETM07|DN Band 7|True
+OutputRaster|RF_ETM01|Reflectance Band 1
+OutputRaster|RF_ETM02|Reflectance Band 2
+OutputRaster|RF_ETM03|Reflectance Band 3
+OutputRaster|RF_ETM04|Reflectance Band 4
+OutputRaster|RF_ETM05|Reflectance Band 5
+OutputRaster|RF_ETM07|Reflectance Band 7
+ParameterRaster|DN_OLI01|DN Band 1|True
+ParameterRaster|DN_OLI02|DN Band 2|True
+ParameterRaster|DN_OLI03|DN Band 3|True
+ParameterRaster|DN_OLI04|DN Band 4|True
+ParameterRaster|DN_OLI05|DN Band 5|True
+ParameterRaster|DN_OLI06|DN Band 6|True
+ParameterRaster|DN_OLI07|DN Band 7|True
+ParameterRaster|DN_OLI09|DN Band 9|True
+OutputRaster|RF_OLI01|Reflectance Band 1
+OutputRaster|RF_OLI02|Reflectance Band 2
+OutputRaster|RF_OLI03|Reflectance Band 3
+OutputRaster|RF_OLI04|Reflectance Band 4
+OutputRaster|RF_OLI05|Reflectance Band 5
+OutputRaster|RF_OLI06|Reflectance Band 6
+OutputRaster|RF_OLI07|Reflectance Band 7
+OutputRaster|RF_OLI09|Reflectance Band 9
+ParameterRaster|DN__TM06|DN Band 6|True
+OutputRaster|RF__TM06|Reflectance Band 6
+ParameterRaster|DN_ETM61|DN Band 61|True
+ParameterRaster|DN_ETM62|DN Band 62|True
+OutputRaster|RF_ETM61|Reflectance Band 61
+OutputRaster|RF_ETM62|Reflectance Band 62
+ParameterRaster|DN_OLI10|DN Band 10|True
+ParameterRaster|DN_OLI11|DN Band 11|True
+OutputRaster|RF_OLI10|Reflectance Band 10
+OutputRaster|RF_OLI11|Reflectance Band 11
+ParameterRaster|DN_PAN08|DN Band 8|True
+OutputRaster|RF_PAN08|Reflectance Band 8
+ParameterFile|METAFILE|Metadata File|False|False
+ParameterSelection|SENSOR|Spacecraft Sensor|[0] Landsat-1 MSS;[1] Landsat-2 MSS;[2] Landsat-3 MSS;[3] Landsat-4 MSS;[4] Landsat-5 MSS;[5] Landsat-4 TM;[6] Landsat-5 TM;[7] Landsat-7 ETM+;[8] Landsat-8 OLI/TIRS| 7
+ParameterString|DATE_ACQU|Image Acquisition Date
+ParameterString|DATE_PROD|Image Creation Date
+ParameterNumber|SUN_HGT|Suns's Height| 0.000000| 90.000000| 45.000000
+ParameterBoolean|AS_RAD|At-Sensor Radiance|False
+ParameterSelection|AC_METHOD|Atmospheric Correction|[0] uncorrected;[1] corrected;[2] dark object subtraction 1;[3] dark object subtraction 2;[4] dark object subtraction 2b;[5] dark object subtraction 3;[6] dark object subtraction 4| 0
+ParameterNumber|AC_DO_CELLS|Minimum Number of Dark Object Cells| 0|None| 1000
+ParameterNumber|AC_RAYLEIGH|Rayleigh Scattering|None|None| 0.000000
+ParameterNumber|AC_SUN_RAD|Solar Radiance| 0.000000| 100.000000| 1.000000
+ParameterSelection|ETM_GAIN_10|Band 1|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_20|Band 2|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_30|Band 3|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_40|Band 4|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_50|Band 5|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_61|Band 61|[0] low;[1] high| 0
+ParameterSelection|ETM_GAIN_62|Band 62|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_70|Band 7|[0] low;[1] high| 1
+ParameterSelection|ETM_GAIN_80|Band 8|[0] low;[1] high| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/TopographicOpenness.txt b/python/plugins/processing/algs/saga/description/TopographicOpenness.txt
new file mode 100644
index 0000000..bcfbd31
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/TopographicOpenness.txt
@@ -0,0 +1,9 @@
+Topographic Openness
+ta_lighting
+ParameterRaster|DEM|Elevation|False
+OutputRaster|POS|Positive Openness
+OutputRaster|NEG|Negative Openness
+ParameterNumber|RADIUS|Radial Limit| 0.000000|None| 10000.000000
+ParameterSelection|METHOD|Method|[0] multi scale;[1] sectors| 1
+ParameterNumber|DLEVEL|Multi Scale Factor| 1.250000|None| 3.000000
+ParameterNumber|NDIRS|Number of Sectors| 2|None| 8
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Union.txt b/python/plugins/processing/algs/saga/description/Union.txt
new file mode 100644
index 0000000..be9cc76
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Union.txt
@@ -0,0 +1,6 @@
+Union
+shapes_polygons
+ParameterVector|A|Layer A|-1|False
+ParameterVector|B|Layer B|-1|False
+OutputVector|RESULT|Union
+ParameterBoolean|SPLIT|Split Parts|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/Update.txt b/python/plugins/processing/algs/saga/description/Update.txt
new file mode 100644
index 0000000..690b7dd
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/Update.txt
@@ -0,0 +1,6 @@
+Update
+shapes_polygons
+ParameterVector|A|Layer A|-1|False
+ParameterVector|B|Layer B|-1|False
+OutputVector|RESULT|Update
+ParameterBoolean|SPLIT|Split Parts|True
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/UpslopeandDownslopeCurvature.txt b/python/plugins/processing/algs/saga/description/UpslopeandDownslopeCurvature.txt
new file mode 100644
index 0000000..0bdeff7
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/UpslopeandDownslopeCurvature.txt
@@ -0,0 +1,9 @@
+Upslope and Downslope Curvature
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+OutputRaster|C_LOCAL|Local Curvature
+OutputRaster|C_UP|Upslope Curvature
+OutputRaster|C_UP_LOCAL|Local Upslope Curvature
+OutputRaster|C_DOWN|Downslope Curvature
+OutputRaster|C_DOWN_LOCAL|Local Downslope Curvature
+ParameterNumber|WEIGHTING|Upslope Weighting| 0.000000| 1.000000| 0.500000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ValleyDepth.txt b/python/plugins/processing/algs/saga/description/ValleyDepth.txt
new file mode 100644
index 0000000..9d2f142
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ValleyDepth.txt
@@ -0,0 +1,8 @@
+Valley Depth
+ta_channels
+ParameterRaster|ELEVATION|Elevation|False
+OutputRaster|VALLEY_DEPTH|Valley Depth
+OutputRaster|RIDGE_LEVEL|Ridge Level
+ParameterNumber|THRESHOLD|Tension Threshold [Percentage of Cell Size]| 0.000000|None| 1.000000
+ParameterBoolean|NOUNDERGROUND|Keep Ridge Level above Surface|True
+ParameterNumber|ORDER|Ridge Detection Threshold| 1| 7| 4
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ValleyandRidgeDetection(TopHatApproach).txt b/python/plugins/processing/algs/saga/description/ValleyandRidgeDetection(TopHatApproach).txt
new file mode 100644
index 0000000..d84c066a
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ValleyandRidgeDetection(TopHatApproach).txt
@@ -0,0 +1,12 @@
+Valley and Ridge Detection (Top Hat Approach)
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+OutputRaster|VALLEY|Valley Depth
+OutputRaster|HILL|Hill Height
+OutputRaster|VALLEY_IDX|Valley Index
+OutputRaster|HILL_IDX|Hill Index
+OutputRaster|SLOPE_IDX|Hillslope Index
+ParameterNumber|RADIUS_VALLEY|Valley Radius| 0.000000|None| 1000.000000
+ParameterNumber|RADIUS_HILL|Hill Radius| 0.000000|None| 1000.000000
+ParameterNumber|THRESHOLD|Elevation Threshold| 0.000000|None| 100.000000
+ParameterSelection|METHOD|Slope Index|[0] default;[1] alternative| 0
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/VegetationIndex(DistanceBased).txt b/python/plugins/processing/algs/saga/description/VegetationIndex(DistanceBased).txt
new file mode 100644
index 0000000..f7ed226
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/VegetationIndex(DistanceBased).txt
@@ -0,0 +1,12 @@
+Vegetation Index (Distance Based)
+imagery_tools
+ParameterRaster|RED|Red Reflectance|False
+ParameterRaster|NIR|Near Infrared Reflectance|False
+OutputRaster|PVI0|Perpendicular Vegetation Index (Richardson and Wiegand, 1977)
+OutputRaster|PVI1|Perpendicular Vegetation Index (Perry and Lautenschlager, 1984)
+OutputRaster|PVI2|Perpendicular Vegetation Index (Walther and Shabaani)
+OutputRaster|PVI3|Perpendicular Vegetation Index (Qi, et al., 1994)
+OutputRaster|TSAVI|Transformed Soil Adjusted Vegetation Index (Baret et al. 1989)
+OutputRaster|ATSAVI|Transformed Soil Adjusted Vegetation Index (Baret and Guyot, 1991)
+ParameterNumber|INTERCEPT|Intercept of Soil Line|None|None| 0.000000
+ParameterNumber|SLOPE|Slope of Soil Line|None|None| 0.500000
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/WarpingShapes.txt b/python/plugins/processing/algs/saga/description/WarpingShapes.txt
new file mode 100644
index 0000000..fe73b58
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/WarpingShapes.txt
@@ -0,0 +1,10 @@
+Warping Shapes
+pj_georeference
+ParameterVector|REF_SOURCE|Reference Points (Origin)|-1|False
+ParameterVector|REF_TARGET|Reference Points (Projection)|-1|True
+ParameterTable|XFIELD|x Position|False
+ParameterTable|YFIELD|y Position|False
+ParameterSelection|METHOD|Method|[0] Automatic;[1] Triangulation;[2] Spline;[3] Affine;[4] 1st Order Polynomial;[5] 2nd Order Polynomial;[6] 3rd Order Polynomial;[7] Polynomial, Order| 0
+ParameterNumber|ORDER|Polynomial Order| 1|None| 3
+ParameterVector|INPUT|Input|-1|False
+OutputVector|OUTPUT|Output
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/WatershedSegmentation(ViGrA).txt b/python/plugins/processing/algs/saga/description/WatershedSegmentation(ViGrA).txt
new file mode 100644
index 0000000..153e254
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/WatershedSegmentation(ViGrA).txt
@@ -0,0 +1,7 @@
+Watershed Segmentation (ViGrA)
+imagery_vigra
+ParameterRaster|INPUT|Input|False
+OutputRaster|OUTPUT|Segmentation
+ParameterNumber|SCALE|Width of gradient filter| 0.000000|None| 1.000000
+ParameterBoolean|RGB|RGB coded data|False
+ParameterBoolean|EDGES|Edges|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/WindExpositionIndex.txt b/python/plugins/processing/algs/saga/description/WindExpositionIndex.txt
new file mode 100644
index 0000000..060bb43
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/WindExpositionIndex.txt
@@ -0,0 +1,9 @@
+Wind Exposition Index
+ta_morphometry
+ParameterRaster|DEM|Elevation|False
+OutputRaster|EXPOSITION|Wind Exposition
+ParameterNumber|MAXDIST|Search Distance [km]| 0.000000|None| 300.000000
+ParameterNumber|STEP|Angular Step Size (Degree)| 1.000000| 45.000000| 15.000000
+ParameterBoolean|OLDVER|Old Version|False
+ParameterNumber|ACCEL|Acceleration| 1.000000|None| 1.500000
+ParameterBoolean|PYRAMIDS|Elevation Averaging|False
\ No newline at end of file
diff --git a/python/plugins/processing/algs/saga/description/ZonalMultipleRegressionAnalysis(PointsandPredictorGrids).txt b/python/plugins/processing/algs/saga/description/ZonalMultipleRegressionAnalysis(PointsandPredictorGrids).txt
new file mode 100644
index 0000000..c5b80b5
--- /dev/null
+++ b/python/plugins/processing/algs/saga/description/ZonalMultipleRegressionAnalysis(PointsandPredictorGrids).txt
@@ -0,0 +1,14 @@
+Zonal Multiple Regression Analysis (Points and Predictor Grids)
+statistics_regression
+ParameterMultipleInput|PREDICTORS|Predictors|3|False
+ParameterVector|ZONES|Zones|-1|False
+ParameterVector|POINTS|Points|-1|False
+ParameterTable|ATTRIBUTE|Dependent Variable|False
+OutputVector|RESIDUALS|Residuals
+OutputRaster|REGRESSION|Regression
+ParameterSelection|RESAMPLING|Resampling|[0] Nearest Neighbour;[1] Bilinear Interpolation;[2] Bicubic Spline Interpolation;[3] B-Spline Interpolation| 3
+ParameterBoolean|COORD_X|Include X Coordinate|False
+ParameterBoolean|COORD_Y|Include Y Coordinate|False
+ParameterBoolean|INTERCEPT|Intercept|True
+ParameterSelection|METHOD|Method|[0] include all;[1] forward;[2] backward;[3] stepwise| 3
+ParameterNumber|P_VALUE|Significance Level| 0.000000| 100.000000| 5.000000
\ No newline at end of file
diff --git a/python/plugins/processing/gui/AlgorithmExecutor.py b/python/plugins/processing/gui/AlgorithmExecutor.py
index 5c8e2ef..f1b4284 100644
--- a/python/plugins/processing/gui/AlgorithmExecutor.py
+++ b/python/plugins/processing/gui/AlgorithmExecutor.py
@@ -38,6 +38,7 @@ from processing.tools.system import getTempFilename
from processing.tools import vector
from processing.core.SilentProgress import SilentProgress
+
def runalg(alg, progress=None):
"""Executes a given algorithm, showing its progress in the
progress object passed along.
diff --git a/python/plugins/processing/gui/ScriptEditorDialog.py b/python/plugins/processing/gui/ScriptEditorDialog.py
index f7a3dc1..243a5c9 100644
--- a/python/plugins/processing/gui/ScriptEditorDialog.py
+++ b/python/plugins/processing/gui/ScriptEditorDialog.py
@@ -138,7 +138,6 @@ class ScriptEditorDialog(BASE, WIDGET):
self.editor.setLexerType(self.algType)
-
def showSnippets(self, evt):
popupmenu = QMenu()
for name, snippet in self.snippets.iteritems():
diff --git a/python/plugins/processing/tools/dataobjects.py b/python/plugins/processing/tools/dataobjects.py
index 721e180..8ba6830 100644
--- a/python/plugins/processing/tools/dataobjects.py
+++ b/python/plugins/processing/tools/dataobjects.py
@@ -74,8 +74,8 @@ def getSupportedOutputTableExtensions():
def getRasterLayers(sorting=True):
- layers = QgsProject.instance().layerTreeRoot().findLayers()
- raster = [lay.layer() for lay in layers if lay.layer() is not None and canUseRasterLayer(lay.layer())]
+ layers = QgsMapLayerRegistry.instance().mapLayers().values()
+ raster = [lay for lay in layers if lay is not None and canUseRasterLayer(lay)]
if sorting:
return sorted(raster, key=lambda layer: layer.name().lower())
else:
@@ -83,8 +83,8 @@ def getRasterLayers(sorting=True):
def getVectorLayers(shapetype=[-1], sorting=True):
- layers = QgsProject.instance().layerTreeRoot().findLayers()
- vector = [lay.layer() for lay in layers if canUseVectorLayer(lay.layer(), shapetype)]
+ layers = QgsMapLayerRegistry.instance().mapLayers().values()
+ vector = [lay for lay in layers if canUseVectorLayer(lay, shapetype)]
if sorting:
return sorted(vector, key=lambda layer: layer.name().lower())
else:
@@ -115,12 +115,11 @@ def getAllLayers():
def getTables(sorting=True):
- layers = QgsProject.instance().layerTreeRoot().findLayers()
+ layers = QgsMapLayerRegistry.instance().mapLayers().values()
tables = []
for layer in layers:
- mapLayer = layer.layer()
- if mapLayer.type() == QgsMapLayer.VectorLayer:
- tables.append(mapLayer)
+ if layer.type() == QgsMapLayer.VectorLayer:
+ tables.append(layer)
if sorting:
return sorted(tables, key=lambda table: table.name().lower())
else:
diff --git a/src/app/dwg/libdxfrw/intern/dwgreader18.cpp b/src/app/dwg/libdxfrw/intern/dwgreader18.cpp
index 7d69aa4..b399fe8 100644
--- a/src/app/dwg/libdxfrw/intern/dwgreader18.cpp
+++ b/src/app/dwg/libdxfrw/intern/dwgreader18.cpp
@@ -116,7 +116,7 @@ void dwgReader18::parseSysPage( duint8 *decompSec, duint32 decompSize )
}
DRW_DBG( "\n" );
#endif
- DRW_DBG( "decompresing " );
+ DRW_DBG( "decompressing " );
DRW_DBG( compSize );
DRW_DBG( " bytes in " );
DRW_DBG( decompSize );
@@ -231,7 +231,7 @@ bool dwgReader18::parseDataPage( dwgSectionInfo si/*, duint8 *dData*/ )
duint8* oData = objData + pi.startOffset;
pi.uSize = si.maxSize;
- DRW_DBG( "decompresing " );
+ DRW_DBG( "decompressing " );
DRW_DBG( pi.cSize );
DRW_DBG( " bytes in " );
DRW_DBG( pi.uSize );
@@ -251,7 +251,7 @@ bool dwgReader18::readMetaData()
if ( ! fileBuf->setPosition( 11 ) )
return false;
maintenanceVersion = fileBuf->getRawChar8();
- DRW_DBG( "maintenance verion= " );
+ DRW_DBG( "maintenance version= " );
DRW_DBGH( maintenanceVersion );
DRW_DBG( "\nbyte at 0x0C= " );
DRW_DBGH( fileBuf->getRawChar8() );
diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp
index 1f3e6bd..9633f54 100644
--- a/src/app/qgisapp.cpp
+++ b/src/app/qgisapp.cpp
@@ -6329,7 +6329,7 @@ void QgisApp::saveAsVectorFileGeneral( QgsVectorLayer* vlayer, bool symbologyOpt
void QgisApp::checkForDeprecatedLabelsInProject()
{
- bool ok;
+ bool ok = false;
QgsProject::instance()->readBoolEntry( "DeprecatedLabels", "/Enabled", false, &ok );
if ( ok ) // project already flagged (regardless of project property value)
{
diff --git a/src/app/qgsclipboard.cpp b/src/app/qgsclipboard.cpp
index 4ff6acf..84bc588 100644
--- a/src/app/qgsclipboard.cpp
+++ b/src/app/qgsclipboard.cpp
@@ -187,8 +187,17 @@ QgsFeatureList QgsClipboard::stringToFeatureList( const QString& string, const Q
Q_FOREACH ( const QString& row, values )
{
- // Assume that it's just WKT for now.
- QgsGeometry* geometry = QgsGeometry::fromWkt( row );
+ // Assume that it's just WKT for now. because GeoJSON is managed by
+ // previous QgsOgrUtils::stringToFeatureList call
+ // Get the first value of a \t separated list. WKT clipboard pasted
+ // feature has first element the WKT geom.
+ // This split is to fix te following issue: https://issues.qgis.org/issues/16870
+ // Value separators are set in generateClipboardText
+ QStringList fieldValues = row.split( '\t' );
+ if ( fieldValues.isEmpty() )
+ continue;
+
+ QgsGeometry *geometry = QgsGeometry::fromWkt( fieldValues[0] );
if ( !geometry )
continue;
diff --git a/src/core/qgsgml.cpp b/src/core/qgsgml.cpp
index 6f7f543..b77202d 100644
--- a/src/core/qgsgml.cpp
+++ b/src/core/qgsgml.cpp
@@ -485,6 +485,7 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
const int nsLen = ( pszSep ) ? ( int )( pszSep - el ) : 0;
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
ParseMode theParseMode( mParseModeStack.isEmpty() ? none : mParseModeStack.top() );
+ int elDimension = 0;
// Figure out if the GML namespace is GML_NAMESPACE or GML32_NAMESPACE
if ( !mGMLNameSpaceURIPtr && pszSep )
@@ -543,14 +544,14 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
mParseModeStack.push( QgsGmlStreamingParser::posList );
mCoorMode = QgsGmlStreamingParser::posList;
mStringCash.clear();
- if ( mDimension == 0 )
+ if ( elDimension == 0 )
{
QString srsDimension = readAttribute( "srsDimension", attr );
bool ok;
int dimension = srsDimension.toInt( &ok );
if ( ok )
{
- mDimension = dimension;
+ elDimension = dimension;
}
}
}
@@ -808,7 +809,7 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
if ( !mGeometryString.empty() )
isGeom = true;
- if ( mDimension == 0 && isGeom )
+ if ( elDimension == 0 && isGeom )
{
// srsDimension can also be set on the top geometry element
// e.g. https://data.linz.govt.nz/services;key=XXXXXXXX/wfs?SERVICE=WFS&REQUEST=GetFeature&VERSION=2.0.0&TYPENAMES=data.linz.govt.nz:layer-524
@@ -817,10 +818,16 @@ void QgsGmlStreamingParser::startElement( const XML_Char* el, const XML_Char** a
int dimension = srsDimension.toInt( &ok );
if ( ok )
{
- mDimension = dimension;
+ elDimension = dimension;
}
}
+ if ( elDimension != 0 )
+ {
+ mDimension = elDimension;
+ }
+ mDimensionStack.push( mDimension );
+
if ( mEpsg == 0 && isGeom )
{
if ( readEpsgFromAttribute( mEpsg, attr ) != 0 )
@@ -847,6 +854,8 @@ void QgsGmlStreamingParser::endElement( const XML_Char* el )
const int localNameLen = ( pszSep ) ? ( int )( elLen - nsLen ) - 1 : elLen;
ParseMode theParseMode( mParseModeStack.isEmpty() ? none : mParseModeStack.top() );
+ mDimension = mDimensionStack.isEmpty() ? 0 : mDimensionStack.top() ;
+
const bool isGMLNS = ( nsLen == mGMLNameSpaceURI.size() && mGMLNameSpaceURIPtr && memcmp( el, mGMLNameSpaceURIPtr, nsLen ) == 0 );
if ( theParseMode == coordinate && isGMLNS && LOCALNAME_EQUALS( "coordinates" ) )
diff --git a/src/core/qgsgml.h b/src/core/qgsgml.h
index 2b5008a..7cd333f 100644
--- a/src/core/qgsgml.h
+++ b/src/core/qgsgml.h
@@ -289,7 +289,9 @@ class CORE_EXPORT QgsGmlStreamingParser
QString mCoordinateSeparator;
/** Tuple separator for coordinate strings. Usually " " */
QString mTupleSeparator;
- /** Number of dimensions in pos or posList */
+ /** Keep track about number of dimensions in pos or posList */
+ QStack<int> mDimensionStack;
+ /** Number of dimensions in pos or posList for the current geometry */
int mDimension;
/** Coordinates mode, coordinate or posList */
ParseMode mCoorMode;
diff --git a/src/core/qgssnappingutils.cpp b/src/core/qgssnappingutils.cpp
index 3ab2d5f..f42fea9 100644
--- a/src/core/qgssnappingutils.cpp
+++ b/src/core/qgssnappingutils.cpp
@@ -609,7 +609,8 @@ void QgsSnappingUtils::readConfigFromProject()
setSnapOnIntersections( QgsProject::instance()->readNumEntry( "Digitizing", "/IntersectionSnapping", 0 ) );
//read snapping settings from project
- bool snappingDefinedInProject, ok;
+ bool snappingDefinedInProject = false;
+ bool ok = false;
QStringList layerIdList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingList", QStringList(), &snappingDefinedInProject );
QStringList enabledList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingEnabledList", QStringList(), &ok );
QStringList toleranceList = QgsProject::instance()->readListEntry( "Digitizing", "/LayerSnappingToleranceList", QStringList(), &ok );
diff --git a/src/core/qgsvectorfilewriter.cpp b/src/core/qgsvectorfilewriter.cpp
index 41ca9ae..1539a0b 100644
--- a/src/core/qgsvectorfilewriter.cpp
+++ b/src/core/qgsvectorfilewriter.cpp
@@ -825,7 +825,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
<< "AS_XYZ"
<< "AS_XY"
<< "AS_YX",
- "AS_XY", // Default value
+ "", // Default value
true // Allow None
) );
@@ -868,9 +868,21 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
QObject::tr( "Override the type of shapefile created. "
"Can be one of NULL for a simple .dbf file with no .shp file, POINT, "
"ARC, POLYGON or MULTIPOINT for 2D, or POINTZ, ARCZ, POLYGONZ or "
- "MULTIPOINTZ for 3D. Shapefiles with measure values are not supported, "
- "nor are MULTIPATCH files." ),
- QStringList()
+ "MULTIPOINTZ for 3D;" ) +
+#if defined(GDAL_COMPUTE_VERSION) && GDAL_VERSION_NUM < GDAL_COMPUTE_VERSION(2,1,0)
+ QObject::tr( " Shapefiles with measure values are not supported,"
+ " nor are MULTIPATCH files." ) +
+#endif
+#if defined(GDAL_COMPUTE_VERSION) && GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,1,0)
+ QObject::tr( " POINTM, ARCM, POLYGONM or MULTIPOINTM for measured geometries"
+ " and POINTZM, ARCZM, POLYGONZM or MULTIPOINTZM for 3D measured"
+ " geometries." ) +
+#endif
+#if defined(GDAL_COMPUTE_VERSION) && GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,2,0)
+ QObject::tr( " MULTIPATCH files are supported since GDAL 2.2." ) +
+#endif
+ ""
+ , QStringList()
<< "NULL"
<< "POINT"
<< "ARC"
@@ -879,7 +891,21 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
<< "POINTZ"
<< "ARCZ"
<< "POLYGONZ"
- << "MULTIPOINTZ",
+ << "MULTIPOINTZ"
+#if defined(GDAL_COMPUTE_VERSION) && GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,1,0)
+ << "POINTM"
+ << "ARCM"
+ << "POLYGONM"
+ << "MULTIPOINTM"
+ << "POINTZM"
+ << "ARCZM"
+ << "POLYGONZM"
+ << "MULTIPOINTZM"
+#endif
+#if defined(GDAL_COMPUTE_VERSION) && GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,2,0)
+ << "MULTIPATCH"
+#endif
+ << "",
QString(), // Default value
true // Allow None
) );
@@ -1001,7 +1027,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
"the foo_bar pattern, foo will be considered as the namespace "
"of the element, and a <foo:bar> element will be written. "
"Otherwise, elements will be written in the <ogr:> namespace." ),
- true // Default value
+ false // Default value
) );
datasetOptions.insert( "WRITE_HEADER_AND_FOOTER", new BoolOption(
@@ -1177,7 +1203,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
layerOptions.insert( "GEOMETRY_NAME", new StringOption(
QObject::tr( "Name for the geometry column" ),
- "geometry" // Default value
+ "geom" // Default value
) );
#if defined(GDAL_COMPUTE_VERSION) && GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,0,0)
@@ -1238,7 +1264,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
datasetOptions.insert( "GPX_USE_EXTENSIONS", new BoolOption(
QObject::tr( "If GPX_USE_EXTENSIONS=YES is specified, "
"extra fields will be written inside the <extensions> tag." ),
- true // Default value
+ false // Default value
) );
datasetOptions.insert( "GPX_EXTENSIONS_NS", new StringOption(
@@ -1329,8 +1355,16 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
<< "clampToGround"
<< "relativeToGround"
<< "absolute",
- "clampToGround" // Default value
+ "relativeToGround" // Default value
+ ) );
+
+#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,2,0)
+ datasetOptions.insert( "DOCUMENT_ID", new StringOption(
+ QObject::tr( "The DOCUMENT_ID datasource creation option can be used to specified "
+ "the id of the root <Document> node. The default value is root_doc." ),
+ "root_doc" // Default value
) );
+#endif
driverMetadata.insert( "KML",
MetaData(
@@ -1348,15 +1382,34 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
datasetOptions.clear();
layerOptions.clear();
- layerOptions.insert( "SPATIAL_INDEX_MODE", new SetOption(
- QObject::tr( "Use this to turn on 'quick spatial index mode'. "
- "In this mode writing files can be about 5 times faster, "
- "but spatial queries can be up to 30 times slower." ),
- QStringList()
- << "QUICK",
- "", // Default value
- true // Allow None
+ datasetOptions.insert( "SPATIAL_INDEX_MODE", new SetOption(
+ QObject::tr( "Use this to turn on 'quick spatial index mode'. "
+ "In this mode writing files can be about 5 times faster, "
+ "but spatial queries can be up to 30 times slower." ),
+ QStringList()
+ << "QUICK"
+ << "OPTIMIZED",
+ "QUICK", // Default value
+ true // Allow None
+ ) );
+
+#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,0,2)
+ datasetOptions.insert( "BLOCK_SIZE", new IntOption(
+ QObject::tr( "(multiples of 512): Block size for .map files. Defaults "
+ "to 512. MapInfo 15.2 and above creates .tab files with a "
+ "blocksize of 16384 bytes. Any MapInfo version should be "
+ "able to handle block sizes from 512 to 32256." ),
+ 512
+ ) );
+#endif
+#if GDAL_VERSION_NUM >= GDAL_COMPUTE_VERSION(2,0,0)
+ layerOptions.insert( "BOUNDS", new StringOption(
+ QObject::tr( "xmin,ymin,xmax,ymax: Define custom layer bounds to increase the "
+ "accuracy of the coordinates. Note: the geometry of written "
+ "features must be within the defined box." ),
+ "" // Default value
) );
+#endif
driverMetadata.insert( "MapInfo File",
MetaData(
@@ -1478,7 +1531,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
datasetOptions.insert( "RETURN_PRIMITIVES", new BoolOption(
QObject::tr( "Should all the low level geometry primitives be returned as special "
"IsolatedNode, ConnectedNode, Edge and Face layers." ),
- true // Default value
+ false // Default value
) );
datasetOptions.insert( "PRESERVE_EMPTY_NUMBERS", new BoolOption(
@@ -1498,7 +1551,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
QObject::tr( "Should additional attributes relating features to their underlying "
"geometric primitives be attached. These are the values of the FSPT group, "
"and are primarily needed when doing S-57 to S-57 translations." ),
- true // Default value
+ false // Default value
) );
datasetOptions.insert( "RECODE_BY_DSSI", new BoolOption(
@@ -1695,17 +1748,15 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
datasetOptions.clear();
layerOptions.clear();
-#if 0
datasetOptions.insert( "HEADER", new StringOption(
QObject::tr( "Override the header file used - in place of header.dxf." ),
- "" // Default value
+ QLatin1String( "" ) // Default value
) );
datasetOptions.insert( "TRAILER", new StringOption(
QObject::tr( "Override the trailer file used - in place of trailer.dxf." ),
- "" // Default value
+ QLatin1String( "" ) // Default value
) );
-#endif
driverMetadata.insert( "DXF",
MetaData(
@@ -1731,14 +1782,20 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
"GXT" // Default value
) );
-#if 0
datasetOptions.insert( "CONFIG", new StringOption(
QObject::tr( "path to the GCT : the GCT file describe the GeoConcept types definitions: "
"In this file, every line must start with //# followed by a keyword. "
"Lines starting with // are comments." ),
- "" // Default value
+ QLatin1String( "" ) // Default value
+ ) );
+
+ datasetOptions.insert( "FEATURETYPE", new StringOption(
+ QObject::tr( "defines the feature to be created. The TYPE corresponds to one of the Name "
+ "found in the GCT file for a type section. The SUBTYPE corresponds to one of "
+ "the Name found in the GCT file for a sub-type section within the previous "
+ "type section." ),
+ QLatin1String( "" ) // Default value
) );
-#endif
driverMetadata.insert( "Geoconcept",
MetaData(
@@ -1766,7 +1823,7 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
"SHAPE" // Default value
) );
- layerOptions.insert( "OID_NAME", new StringOption(
+ layerOptions.insert( "FID", new StringOption(
QObject::tr( "Name of the OID column to create. Defaults to 'OBJECTID'." ),
"OBJECTID" // Default value
) );
@@ -1797,6 +1854,18 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
false // Allow None
) );
+ layerOptions.insert( "OGR_XLSX_HEADERS", new SetOption(
+ QObject::tr( "By default, the driver will read the first lines of each sheet to detect "
+ "if the first line might be the name of columns. If set to FORCE, the "
+ "driver will consider the first default" ),
+ QStringList()
+ << "FORCE"
+ << "DISABLE"
+ << "AUTO",
+ "AUTO", // Default value
+ false // Allow None
+ ) );
+
driverMetadata.insert( "XLSX",
MetaData(
"MS Office Open XML spreadsheet",
@@ -1823,6 +1892,18 @@ QMap<QString, QgsVectorFileWriter::MetaData> QgsVectorFileWriter::initMetaData()
false // Allow None
) );
+ layerOptions.insert( "OGR_ODS_HEADERS", new SetOption(
+ QObject::tr( "By default, the driver will read the first lines of each sheet to detect "
+ "if the first line might be the name of columns. If set to FORCE, the "
+ "driver will consider the first default" ),
+ QStringList()
+ << "FORCE"
+ << "DISABLE"
+ << "AUTO",
+ "AUTO", // Default value
+ false // Allow None
+ ) );
+
driverMetadata.insert( "ODS",
MetaData(
"Open Document Spreadsheet",
diff --git a/src/core/qgsvectorlayercache.cpp b/src/core/qgsvectorlayercache.cpp
index 3eea570..af597b7 100644
--- a/src/core/qgsvectorlayercache.cpp
+++ b/src/core/qgsvectorlayercache.cpp
@@ -22,6 +22,7 @@
QgsVectorLayerCache::QgsVectorLayerCache( QgsVectorLayer* layer, int cacheSize, QObject* parent )
: QObject( parent )
, mLayer( layer )
+ , mCacheGeometry( true )
, mFullCache( false )
{
mCache.setMaxCost( cacheSize );
diff --git a/src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp b/src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp
index f5dc616..971053b 100644
--- a/src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp
+++ b/src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp
@@ -507,6 +507,14 @@ bool QgsInvertedPolygonRenderer::willRenderFeature( QgsFeature& feat, QgsRenderC
return mSubRenderer->willRenderFeature( feat, context );
}
+QgsLegendSymbolListV2 QgsInvertedPolygonRenderer::legendSymbolItemsV2() const
+{
+ if ( !mSubRenderer )
+ return QgsFeatureRendererV2::legendSymbolItemsV2();
+
+ return mSubRenderer->legendSymbolItemsV2();
+}
+
QgsInvertedPolygonRenderer* QgsInvertedPolygonRenderer::convertFromRenderer( const QgsFeatureRendererV2 *renderer )
{
if ( renderer->type() == "invertedPolygonRenderer" )
diff --git a/src/core/symbology-ng/qgsinvertedpolygonrenderer.h b/src/core/symbology-ng/qgsinvertedpolygonrenderer.h
index ad68773..947981b 100644
--- a/src/core/symbology-ng/qgsinvertedpolygonrenderer.h
+++ b/src/core/symbology-ng/qgsinvertedpolygonrenderer.h
@@ -109,6 +109,8 @@ class CORE_EXPORT QgsInvertedPolygonRenderer : public QgsFeatureRendererV2
*/
virtual bool willRenderFeature( QgsFeature& feat, QgsRenderContext& context ) override;
+ virtual QgsLegendSymbolListV2 legendSymbolItemsV2() const override;
+
/** Creates a renderer out of an XML, for loading*/
static QgsFeatureRendererV2* create( QDomElement& element );
diff --git a/src/customwidgets/CMakeLists.txt b/src/customwidgets/CMakeLists.txt
index f0af869..0d71a36 100644
--- a/src/customwidgets/CMakeLists.txt
+++ b/src/customwidgets/CMakeLists.txt
@@ -114,6 +114,7 @@ INCLUDE_DIRECTORIES(
)
INCLUDE_DIRECTORIES(SYSTEM
${GEOS_INCLUDE_DIR}
+ ${QSCINTILLA_INCLUDE_DIR}
${Qt5UiPlugin_INCLUDE_DIRS} # For Qt5
${Qt5Designer_INCLUDE_DIRS} # For Qt5
${QT_QTDESIGNER_INCLUDE_DIR} # For Qt4
diff --git a/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h b/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h
index ce3a347..b4ddda0 100644
--- a/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h
+++ b/src/gui/editorwidgets/core/qgseditorwidgetwrapper.h
@@ -103,7 +103,7 @@ class GUI_EXPORT QgsEditorWidgetWrapper : public QgsWidgetWrapper
*
* @param enabled Enable or Disable?
*/
- void setEnabled( bool enabled ) override;
+ virtual void setEnabled( bool enabled ) override;
/** Sets the widget to display in an indeterminate "mixed value" state.
* @note added in QGIS 2.16
diff --git a/src/gui/editorwidgets/qgsrelationreferencewidget.cpp b/src/gui/editorwidgets/qgsrelationreferencewidget.cpp
index d4eab9d..0d91c98 100644
--- a/src/gui/editorwidgets/qgsrelationreferencewidget.cpp
+++ b/src/gui/editorwidgets/qgsrelationreferencewidget.cpp
@@ -521,7 +521,7 @@ void QgsRelationReferenceWidget::init()
attributes << mReferencedLayer->fieldNameIndex( attr );
layerCache->setCacheSubsetOfAttributes( attributes );
- mMasterModel = new QgsAttributeTableModel( layerCache );
+ mMasterModel = new QgsAttributeTableModel( layerCache, this );
mMasterModel->setRequest( QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry ).setSubsetOfAttributes( requestedAttrs.toList(), mReferencedLayer->fields() ) );
mFilterModel = new QgsAttributeTableFilterModel( mCanvas, mMasterModel, mMasterModel );
mFeatureListModel = new QgsFeatureListModel( mFilterModel, this );
diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp
index e5bc484..a1b42f2 100644
--- a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp
+++ b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.cpp
@@ -43,6 +43,7 @@ QgsValueRelationWidgetWrapper::QgsValueRelationWidgetWrapper( QgsVectorLayer* vl
, mListWidget( nullptr )
, mLineEdit( nullptr )
, mLayer( nullptr )
+ , mUpdating( false )
{
}
@@ -248,3 +249,26 @@ void QgsValueRelationWidgetWrapper::showIndeterminateState()
whileBlocking( mLineEdit )->clear();
}
}
+
+void QgsValueRelationWidgetWrapper::setEnabled( bool enabled )
+{
+ if ( mUpdating )
+ return;
+
+ if ( mListWidget )
+ {
+ mUpdating = true;
+ for ( int i = 0; i < mListWidget->count(); ++i )
+ {
+ QListWidgetItem *item = mListWidget->item( i );
+
+ if ( enabled )
+ item->setFlags( item->flags() | Qt::ItemIsEnabled );
+ else
+ item->setFlags( item->flags() & ~Qt::ItemIsEnabled );
+ }
+ mUpdating = false;
+ }
+ else
+ QgsEditorWidgetWrapper::setEnabled( enabled );
+}
diff --git a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h
index 9c40566..e5f2e0e 100644
--- a/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h
+++ b/src/gui/editorwidgets/qgsvaluerelationwidgetwrapper.h
@@ -68,6 +68,8 @@ class GUI_EXPORT QgsValueRelationWidgetWrapper : public QgsEditorWidgetWrapper
static ValueRelationCache createCache( const QgsEditorWidgetConfig& config );
void showIndeterminateState() override;
+ void setEnabled( bool enabled ) override;
+
protected:
QWidget* createWidget( QWidget* parent ) override;
void initWidget( QWidget* editor ) override;
@@ -84,7 +86,10 @@ class GUI_EXPORT QgsValueRelationWidgetWrapper : public QgsEditorWidgetWrapper
ValueRelationCache mCache;
QgsVectorLayer* mLayer;
+ bool mUpdating;
+
friend class QgsValueRelationWidgetFactory;
+ friend class TestQgsValueRelationWidgetWrapper;
};
Q_DECLARE_METATYPE( QgsValueRelationWidgetWrapper::ValueRelationCache )
diff --git a/src/providers/oracle/qgsoracleprovider.cpp b/src/providers/oracle/qgsoracleprovider.cpp
index e77e09f..f9270db 100644
--- a/src/providers/oracle/qgsoracleprovider.cpp
+++ b/src/providers/oracle/qgsoracleprovider.cpp
@@ -1226,7 +1226,7 @@ bool QgsOracleProvider::addFeatures( QgsFeatureList &flist )
return false;
bool returnvalue = true;
-
+ bool fetchNewFid = getWorkspace().isEmpty() || getWorkspace().toUpper() == "LIVE";
QSqlDatabase db( *mConnection );
@@ -1394,26 +1394,29 @@ bool QgsOracleProvider::addFeatures( QgsFeatureList &flist )
if ( !ins.exec() )
throw OracleException( tr( "Could not insert feature %1" ).arg( features->id() ), ins );
- if ( mPrimaryKeyType == pktRowId )
- {
- features->setFeatureId( mShared->lookupFid( QList<QVariant>() << QVariant( ins.lastInsertId() ) ) );
- QgsDebugMsgLevel( QString( "new fid=%1" ).arg( features->id() ), 4 );
- }
- else if ( mPrimaryKeyType == pktInt || mPrimaryKeyType == pktFidMap )
+ if ( fetchNewFid )
{
- getfid.addBindValue( QVariant( ins.lastInsertId() ) );
- if ( !getfid.exec() || !getfid.next() )
- throw OracleException( tr( "Could not retrieve feature id %1" ).arg( features->id() ), getfid );
-
- int col = 0;
- Q_FOREACH ( int idx, mPrimaryKeyAttrs )
+ if ( mPrimaryKeyType == pktRowId )
{
- const QgsField &fld = field( idx );
+ features->setFeatureId( mShared->lookupFid( QList<QVariant>() << QVariant( ins.lastInsertId() ) ) );
+ QgsDebugMsgLevel( QString( "new fid=%1" ).arg( features->id() ), 4 );
+ }
+ else if ( mPrimaryKeyType == pktInt || mPrimaryKeyType == pktFidMap )
+ {
+ getfid.addBindValue( QVariant( ins.lastInsertId() ) );
+ if ( !getfid.exec() || !getfid.next() )
+ throw OracleException( tr( "Could not retrieve feature id %1" ).arg( features->id() ), getfid );
- QVariant v = getfid.value( col++ );
- if ( v.type() != fld.type() )
- v = QgsVectorDataProvider::convertValue( fld.type(), v.toString() );
- features->setAttribute( idx, v );
+ int col = 0;
+ Q_FOREACH ( int idx, mPrimaryKeyAttrs )
+ {
+ const QgsField &fld = field( idx );
+
+ QVariant v = getfid.value( col++ );
+ if ( v.type() != fld.type() )
+ v = QgsVectorDataProvider::convertValue( fld.type(), v.toString() );
+ features->setAttribute( idx, v );
+ }
}
}
}
diff --git a/src/server/qgswfsserver.cpp b/src/server/qgswfsserver.cpp
index 1544407..8a78d85 100644
--- a/src/server/qgswfsserver.cpp
+++ b/src/server/qgswfsserver.cpp
@@ -445,7 +445,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
QDomElement queryElem;
for ( int i = 0; i < queryNodes.size(); i++ )
{
- queryElem = queryNodes.at( 0 ).toElement();
+ queryElem = queryNodes.at( i ).toElement();
mTypeName = queryElem.attribute( "typeName", "" );
if ( mTypeName.contains( ":" ) )
{
@@ -455,7 +455,7 @@ int QgsWFSServer::getFeature( QgsRequestHandler& request, const QString& format
}
for ( int i = 0; i < queryNodes.size(); i++ )
{
- queryElem = queryNodes.at( 0 ).toElement();
+ queryElem = queryNodes.at( i ).toElement();
mTypeName = queryElem.attribute( "typeName", "" );
if ( mTypeName.contains( ":" ) )
{
diff --git a/src/server/qgswmsserver.cpp b/src/server/qgswmsserver.cpp
index 705a149..1c5c8ca 100644
--- a/src/server/qgswmsserver.cpp
+++ b/src/server/qgswmsserver.cpp
@@ -2362,6 +2362,8 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
break;
}
+ renderContext.expressionContext().setFeature( feature );
+
if ( layer->wkbType() != QGis::WKBNoGeometry && ! searchRect.isEmpty() )
{
if ( !r2 )
@@ -2369,9 +2371,6 @@ int QgsWMSServer::featureInfoFromVectorLayer( QgsVectorLayer* layer,
continue;
}
- renderContext.expressionContext().setFeature( feature );
-
-
//check if feature is rendered at all
bool render = r2->willRenderFeature( feature, renderContext );
if ( !render )
diff --git a/tests/src/app/testqgisappclipboard.cpp b/tests/src/app/testqgisappclipboard.cpp
index ca286c3..cf87a9b 100644
--- a/tests/src/app/testqgisappclipboard.cpp
+++ b/tests/src/app/testqgisappclipboard.cpp
@@ -215,6 +215,31 @@ void TestQgisAppClipboard::pasteWkt()
point = dynamic_cast< QgsPointV2* >( features.at( 1 ).constGeometry()->geometry() );
QCOMPARE( point->x(), 111.0 );
QCOMPARE( point->y(), 30.0 );
+
+ // be sure parsing does not consider attached parameters that
+ // can change geometryType as in https://issues.qgis.org/issues/16870
+ mQgisApp->clipboard()->setText( "POINT (111 30)\t GoodFieldValue\nPOINT (125 10)\t(WrongFieldValue)" );
+
+ features = mQgisApp->clipboard()->copyOf();
+ QCOMPARE( features.length(), 2 );
+
+ QVERIFY( features.at( 0 ).constGeometry() && !features.at( 0 ).constGeometry()->isEmpty() );
+ QCOMPARE( features.at( 0 ).constGeometry()->geometry()->wkbType(), QgsWKBTypes::Point );
+ const QgsGeometry *featureGeom = features.at( 0 ).constGeometry();
+ point = dynamic_cast< QgsPointV2 * >( featureGeom->geometry() );
+ QCOMPARE( point->x(), 111.0 );
+ QCOMPARE( point->y(), 30.0 );
+
+ QVERIFY( features.at( 1 ).constGeometry() && !features.at( 1 ).constGeometry()->isEmpty() );
+ QCOMPARE( features.at( 1 ).constGeometry()->geometry()->wkbType(), QgsWKBTypes::Point );
+ point = dynamic_cast< QgsPointV2 * >( features.at( 1 ).constGeometry()->geometry() );
+ QCOMPARE( point->x(), 125.0 );
+ QCOMPARE( point->y(), 10.0 );
+
+ // only fields => no geom so no feature list is returned
+ mQgisApp->clipboard()->setText( "MNL\t11\t282\tkm\t\nMNL\t11\t347.80000000000001\tkm\t" );
+ features = mQgisApp->clipboard()->copyOf();
+ QCOMPARE( features.length(), 0 );
}
void TestQgisAppClipboard::pasteGeoJson()
diff --git a/tests/src/core/testqgsinvertedpolygonrenderer.cpp b/tests/src/core/testqgsinvertedpolygonrenderer.cpp
index c253e82..62ffba9 100644
--- a/tests/src/core/testqgsinvertedpolygonrenderer.cpp
+++ b/tests/src/core/testqgsinvertedpolygonrenderer.cpp
@@ -28,6 +28,8 @@
#include <qgsapplication.h>
#include <qgsproviderregistry.h>
#include <qgsmaplayerregistry.h>
+#include "qgsrendererv2.h"
+
//qgis test includes
#include "qgsmultirenderchecker.h"
@@ -49,6 +51,7 @@ class TestQgsInvertedPolygon : public QObject
void singleSubRenderer();
void graduatedSubRenderer();
+ void checkSymbolItem();
void preprocess();
void projectionTest();
#if defined(GDAL_VERSION_NUM) && GDAL_VERSION_MAJOR >= 2
@@ -130,6 +133,15 @@ void TestQgsInvertedPolygon::graduatedSubRenderer()
QVERIFY( imageCheck( "inverted_polys_graduated" ) );
}
+void TestQgsInvertedPolygon::checkSymbolItem()
+{
+ QVERIFY( setQml( mpPolysLayer, "inverted_polys_rule.qml" ) );
+ QString firstRuleKey = mpPolysLayer->rendererV2()->legendSymbolItemsV2().first().ruleKey();
+ QVERIFY( mpPolysLayer->rendererV2()->legendSymbolItemChecked( firstRuleKey ) );
+ mpPolysLayer->rendererV2()->checkLegendSymbolItem( firstRuleKey, false );
+ QVERIFY( !mpPolysLayer->rendererV2()->legendSymbolItemChecked( firstRuleKey ) );
+}
+
void TestQgsInvertedPolygon::preprocess()
{
// FIXME will have to find some overlapping polygons
diff --git a/tests/src/gui/CMakeLists.txt b/tests/src/gui/CMakeLists.txt
index e66aba6..9e5ac2f 100644
--- a/tests/src/gui/CMakeLists.txt
+++ b/tests/src/gui/CMakeLists.txt
@@ -144,4 +144,4 @@ ADD_QGIS_TEST(spinbox testqgsspinbox.cpp)
ADD_QGIS_TEST(sqlcomposerdialog testqgssqlcomposerdialog.cpp)
ADD_QGIS_TEST(filedownloader testqgsfiledownloader.cpp)
ADD_QGIS_TEST(composergui testqgscomposergui.cpp)
-
+ADD_QGIS_TEST(valuerelationwidgetwrapper testqgsvaluerelationwidgetwrapper.cpp)
diff --git a/tests/src/gui/testqgsvaluerelationwidgetwrapper.cpp b/tests/src/gui/testqgsvaluerelationwidgetwrapper.cpp
new file mode 100644
index 0000000..faaa904
--- /dev/null
+++ b/tests/src/gui/testqgsvaluerelationwidgetwrapper.cpp
@@ -0,0 +1,107 @@
+/***************************************************************************
+ testqgsvaluerelationwidgetwrapper.cpp
+ --------------------------------------
+ Date : 21 07 2017
+ Copyright : (C) 2017 Paul Blottiere
+ Email : paul dot blottiere at oslandia dot com
+ ***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#include <QtTest/QtTest>
+#include <QScrollBar>
+
+#include <editorwidgets/core/qgseditorwidgetregistry.h>
+#include <qgsapplication.h>
+#include <qgsproject.h>
+#include <qgsvectorlayer.h>
+#include "qgseditorwidgetwrapper.h"
+#include <editorwidgets/qgsvaluerelationwidgetwrapper.h>
+
+class TestQgsValueRelationWidgetWrapper : public QObject
+{
+ Q_OBJECT
+ public:
+ TestQgsValueRelationWidgetWrapper() {}
+
+ private slots:
+ void initTestCase(); // will be called before the first testfunction is executed.
+ void cleanupTestCase(); // will be called after the last testfunction was executed.
+ void init(); // will be called before each testfunction is executed.
+ void cleanup(); // will be called after every testfunction.
+
+ void testScrollBarUnlocked();
+};
+
+void TestQgsValueRelationWidgetWrapper::initTestCase()
+{
+ QgsApplication::init();
+ QgsApplication::initQgis();
+ QgsEditorWidgetRegistry::initEditors();
+}
+
+void TestQgsValueRelationWidgetWrapper::cleanupTestCase()
+{
+ QgsApplication::exitQgis();
+}
+
+void TestQgsValueRelationWidgetWrapper::init()
+{
+}
+
+void TestQgsValueRelationWidgetWrapper::cleanup()
+{
+}
+
+void TestQgsValueRelationWidgetWrapper::testScrollBarUnlocked()
+{
+ // create a vector layer
+ QgsVectorLayer vl1( QString( "LineString?crs=epsg:3111&field=pk:int&field=fk|:int" ), QString( "vl1" ), QString( "memory" ) );
+
+ // build a value relation widget wrapper
+ QListWidget lw;
+ QWidget editor;
+ QgsValueRelationWidgetWrapper w( &vl1, 0, &editor, nullptr );
+ w.setEnabled( true );
+ w.initWidget( &lw );
+
+ // add an item virtually
+ QListWidgetItem item;
+ item.setText( "MyText" );
+ w.mListWidget->addItem( &item );
+ QCOMPARE( w.mListWidget->item( 0 )->text(), QString( "MyText" ) );
+
+ // when the widget wrapper is enabled, the container should be enabled
+ // as well as items
+ w.setEnabled( true );
+
+ QCOMPARE( w.widget()->isEnabled(), true );
+
+ bool itemEnabled = w.mListWidget->item( 0 )->flags() & Qt::ItemIsEnabled;
+ QCOMPARE( itemEnabled, true );
+
+ // when the widget wrapper is disabled, the container should still be enabled
+ // to keep the scrollbar available but items should be disabled to avoid
+ // edition
+ w.setEnabled( false );
+
+ itemEnabled = w.mListWidget->item( 0 )->flags() & Qt::ItemIsEnabled;
+ QCOMPARE( itemEnabled, false );
+
+ QCOMPARE( w.widget()->isEnabled(), true );
+
+ // recheck after re-enabled
+ w.setEnabled( true );
+
+ QCOMPARE( w.widget()->isEnabled(), true );
+ itemEnabled = w.mListWidget->item( 0 )->flags() & Qt::ItemIsEnabled;
+ QCOMPARE( itemEnabled, true );
+}
+
+QTEST_MAIN( TestQgsValueRelationWidgetWrapper )
+#include "testqgsvaluerelationwidgetwrapper.moc"
diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt
index 770455b..6b3d443 100644
--- a/tests/src/python/CMakeLists.txt
+++ b/tests/src/python/CMakeLists.txt
@@ -152,6 +152,7 @@ ENDIF (WITH_APIDOC)
IF (WITH_SERVER)
ADD_PYTHON_TEST(PyQgsServer test_qgsserver.py)
+ ADD_PYTHON_TEST(PyQgsServerTwoLayer test_qgsserver_two_layers.py)
ADD_PYTHON_TEST(PyQgsServerAccessControl test_qgsserver_accesscontrol.py)
ADD_PYTHON_TEST(PyQgsServerWFST test_qgsserver_wfst.py)
ADD_PYTHON_TEST(PyQgsOfflineEditingWFS test_offline_editing_wfs.py)
diff --git a/tests/src/python/test_qgsserver_two_layers.py b/tests/src/python/test_qgsserver_two_layers.py
new file mode 100644
index 0000000..f41b2dd
--- /dev/null
+++ b/tests/src/python/test_qgsserver_two_layers.py
@@ -0,0 +1,119 @@
+# -*- coding: utf-8 -*-
+"""QGIS Unit tests for QgsServer.
+
+.. note:: This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+"""
+__copyright__ = 'Copyright 2017, The QGIS Project'
+# This will get replaced with a git SHA1 when you do a git archive
+__revision__ = '$Format:%H$'
+
+import os
+import re
+import urllib
+from mimetools import Message
+from StringIO import StringIO
+from qgis.server import QgsServer
+from qgis.testing import unittest
+from utilities import unitTestDataPath
+
+# Strip path and content length because path may vary
+RE_STRIP_PATH = r'MAP=[^&]+|Content-Length: \d+|<Attribute typeName="[^>]+'
+
+
+class TestQgsServerTwoLayer(unittest.TestCase):
+
+ def setUp(self):
+ """Create the server instance"""
+ self.testdata_path = unitTestDataPath('qgis_server')
+
+ env_vars = ['QUERY_STRING', 'QGIS_PROJECT_FILE']
+ for ev in env_vars:
+ try:
+ del os.environ[ev]
+ except KeyError:
+ pass
+ self.server = QgsServer()
+
+ def assert_headers(self, header, body):
+ headers = Message(StringIO(header))
+ if 'content-length' in headers:
+ content_length = int(headers['content-length'])
+ body_length = len(body)
+ self.assertEqual(content_length, body_length, msg="Header reported content-length: %d Actual body length was: %d" % (content_length, body_length))
+
+ # WFS tests
+ def result_compare(self, file_name, error_msg_header, header, body):
+ self.assert_headers(header, body)
+ response = header + body
+ f = open(os.path.join(self.testdata_path, file_name))
+ expected = f.read()
+ f.close()
+ # Store the output for debug or to regenerate the reference documents:
+ """
+ f = open(os.path.dirname(__file__) + '/wfs_getfeature_' + requestid + '_expected.txt', 'w+')
+ f.write(expected)
+ f.close()
+ f = open(os.path.dirname(__file__) + '/wfs_getfeature_' + requestid + '_response.txt', 'w+')
+ f.write(response)
+ f.close()
+ """
+ response = re.sub(RE_STRIP_PATH, '', response)
+ expected = re.sub(RE_STRIP_PATH, '', expected)
+ self.assertEqual(response, expected, msg=u"%s\n Expected:\n%s\n\n Response:\n%s"
+ % (error_msg_header,
+ unicode(expected, errors='replace'),
+ unicode(response, errors='replace')))
+
+ def wfs_getfeature_post_compare(self, requestid, request):
+ project = os.path.join(self.testdata_path, "test_project_two_layers.qgs")
+ self.assertTrue(os.path.exists(project), msg=u"Project file not found: %s" % (project))
+
+ query_string = 'MAP={}'.format(urllib.quote(project))
+ self.server.putenv("REQUEST_METHOD", "POST")
+ self.server.putenv("REQUEST_BODY", request)
+ header, body = self.server.handleRequest(query_string)
+ self.server.putenv("REQUEST_METHOD", '')
+ self.server.putenv("REQUEST_BODY", '')
+
+ self.result_compare(
+ 'wfs_getfeature_{}.txt'.format(requestid),
+ "GetFeature in POST for '{}' failed.".format(requestid),
+ header, body,
+ )
+
+ def test_getfeature_post_multiple_layer(self):
+ template = """<?xml version="1.0" encoding="UTF-8"?>
+<wfs:GetFeature service="WFS" version="1.1.0">
+ <wfs:Query typeName="secondlayer" xmlns:feature="http://www.qgis.org/gml">
+ <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
+ <ogc:BBOX>
+ <ogc:PropertyName>geometry</ogc:PropertyName>
+ <gml:Envelope xmlns:gml="http://www.opengis.net/gml">
+ <gml:lowerCorner>8 44</gml:lowerCorner>
+ <gml:upperCorner>9 45</gml:upperCorner>
+ </gml:Envelope>
+ </ogc:BBOX>
+ </ogc:Filter>
+ </wfs:Query>
+ <wfs:Query typeName="testlayer" xmlns:feature="http://www.qgis.org/gml">
+ <ogc:Filter xmlns:ogc="http://www.opengis.net/ogc">
+ <ogc:BBOX>
+ <ogc:PropertyName>geometry</ogc:PropertyName>
+ <gml:Envelope xmlns:gml="http://www.opengis.net/gml">
+ <gml:lowerCorner>8 44</gml:lowerCorner>
+ <gml:upperCorner>9 45</gml:upperCorner>
+ </gml:Envelope>
+ </ogc:BBOX>
+ </ogc:Filter>
+ </wfs:Query>
+</wfs:GetFeature>
+"""
+ self.wfs_getfeature_post_compare('multiple', template)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/tests/testdata/inverted_polys_rule.qml b/tests/testdata/inverted_polys_rule.qml
new file mode 100644
index 0000000..7c91a92
--- /dev/null
+++ b/tests/testdata/inverted_polys_rule.qml
@@ -0,0 +1,297 @@
+<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
+<qgis version="2.18.9" simplifyAlgorithm="0" minimumScale="0" maximumScale="1e+08" simplifyDrawingHints="1" minLabelScale="0" maxLabelScale="1e+08" simplifyDrawingTol="1" readOnly="0" simplifyMaxScale="1" hasScaleBasedVisibilityFlag="0" simplifyLocal="1" scaleBasedLabelVisibilityFlag="0">
+ <edittypes>
+ <edittype widgetv2type="TextEdit" name="Name">
+ <widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
+ </edittype>
+ <edittype widgetv2type="TextEdit" name="Value">
+ <widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
+ </edittype>
+ </edittypes>
+ <renderer-v2 forceraster="0" preprocessing="0" type="invertedPolygonRenderer" enableorderby="0">
+ <renderer-v2 forceraster="0" symbollevels="0" type="RuleRenderer" enableorderby="0">
+ <rules key="{7c47ddbb-77ed-4795-a788-47dfd5a912e4}">
+ <rule filter="Value = 7" key="{579517cb-b8c8-49a1-8580-00241734f728}" symbol="0" label="Seven"/>
+ <rule filter="Value = 10" key="{937affbb-2809-4f1a-868b-d5fa8e995494}" symbol="1" label="Ten"/>
+ </rules>
+ <symbols>
+ <symbol alpha="1" clip_to_extent="1" type="fill" name="0">
+ <layer pass="0" class="SimpleFill" locked="0">
+ <prop k="border_width_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="color" v="163,163,163,255"/>
+ <prop k="joinstyle" v="bevel"/>
+ <prop k="offset" v="0,0"/>
+ <prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="offset_unit" v="MM"/>
+ <prop k="outline_color" v="163,163,163,255"/>
+ <prop k="outline_style" v="solid"/>
+ <prop k="outline_width" v="0.26"/>
+ <prop k="outline_width_unit" v="MM"/>
+ <prop k="style" v="solid"/>
+ </layer>
+ </symbol>
+ <symbol alpha="1" clip_to_extent="1" type="fill" name="1">
+ <layer pass="0" class="SimpleFill" locked="0">
+ <prop k="border_width_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="color" v="255,255,255,255"/>
+ <prop k="joinstyle" v="bevel"/>
+ <prop k="offset" v="0,0"/>
+ <prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="offset_unit" v="MM"/>
+ <prop k="outline_color" v="255,255,255,255"/>
+ <prop k="outline_style" v="solid"/>
+ <prop k="outline_width" v="0.26"/>
+ <prop k="outline_width_unit" v="MM"/>
+ <prop k="style" v="solid"/>
+ </layer>
+ </symbol>
+ </symbols>
+ </renderer-v2>
+ </renderer-v2>
+ <labeling type="simple"/>
+ <customproperties>
+ <property key="embeddedWidgets/count" value="0"/>
+ <property key="labeling" value="pal"/>
+ <property key="labeling/addDirectionSymbol" value="false"/>
+ <property key="labeling/angleOffset" value="0"/>
+ <property key="labeling/blendMode" value="0"/>
+ <property key="labeling/bufferBlendMode" value="0"/>
+ <property key="labeling/bufferColorA" value="255"/>
+ <property key="labeling/bufferColorB" value="255"/>
+ <property key="labeling/bufferColorG" value="255"/>
+ <property key="labeling/bufferColorR" value="255"/>
+ <property key="labeling/bufferDraw" value="false"/>
+ <property key="labeling/bufferJoinStyle" value="128"/>
+ <property key="labeling/bufferNoFill" value="false"/>
+ <property key="labeling/bufferSize" value="1"/>
+ <property key="labeling/bufferSizeInMapUnits" value="false"/>
+ <property key="labeling/bufferSizeMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/bufferTransp" value="0"/>
+ <property key="labeling/centroidInside" value="false"/>
+ <property key="labeling/centroidWhole" value="false"/>
+ <property key="labeling/decimals" value="3"/>
+ <property key="labeling/displayAll" value="false"/>
+ <property key="labeling/dist" value="0"/>
+ <property key="labeling/distInMapUnits" value="false"/>
+ <property key="labeling/distMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/drawLabels" value="false"/>
+ <property key="labeling/enabled" value="false"/>
+ <property key="labeling/fieldName" value=""/>
+ <property key="labeling/fitInPolygonOnly" value="false"/>
+ <property key="labeling/fontCapitals" value="0"/>
+ <property key="labeling/fontFamily" value="Cantarell"/>
+ <property key="labeling/fontItalic" value="false"/>
+ <property key="labeling/fontLetterSpacing" value="0"/>
+ <property key="labeling/fontLimitPixelSize" value="false"/>
+ <property key="labeling/fontMaxPixelSize" value="10000"/>
+ <property key="labeling/fontMinPixelSize" value="3"/>
+ <property key="labeling/fontSize" value="11"/>
+ <property key="labeling/fontSizeInMapUnits" value="false"/>
+ <property key="labeling/fontSizeMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/fontStrikeout" value="false"/>
+ <property key="labeling/fontUnderline" value="false"/>
+ <property key="labeling/fontWeight" value="50"/>
+ <property key="labeling/fontWordSpacing" value="0"/>
+ <property key="labeling/formatNumbers" value="false"/>
+ <property key="labeling/isExpression" value="true"/>
+ <property key="labeling/labelOffsetInMapUnits" value="true"/>
+ <property key="labeling/labelOffsetMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/labelPerPart" value="false"/>
+ <property key="labeling/leftDirectionSymbol" value="<"/>
+ <property key="labeling/limitNumLabels" value="false"/>
+ <property key="labeling/maxCurvedCharAngleIn" value="25"/>
+ <property key="labeling/maxCurvedCharAngleOut" value="-25"/>
+ <property key="labeling/maxNumLabels" value="2000"/>
+ <property key="labeling/mergeLines" value="false"/>
+ <property key="labeling/minFeatureSize" value="0"/>
+ <property key="labeling/multilineAlign" value="4294967295"/>
+ <property key="labeling/multilineHeight" value="1"/>
+ <property key="labeling/namedStyle" value="Regular"/>
+ <property key="labeling/obstacle" value="true"/>
+ <property key="labeling/obstacleFactor" value="1"/>
+ <property key="labeling/obstacleType" value="0"/>
+ <property key="labeling/offsetType" value="0"/>
+ <property key="labeling/placeDirectionSymbol" value="0"/>
+ <property key="labeling/placement" value="1"/>
+ <property key="labeling/placementFlags" value="10"/>
+ <property key="labeling/plussign" value="false"/>
+ <property key="labeling/predefinedPositionOrder" value="TR,TL,BR,BL,R,L,TSR,BSR"/>
+ <property key="labeling/preserveRotation" value="true"/>
+ <property key="labeling/previewBkgrdColor" value="#ffffff"/>
+ <property key="labeling/priority" value="5"/>
+ <property key="labeling/quadOffset" value="4"/>
+ <property key="labeling/repeatDistance" value="0"/>
+ <property key="labeling/repeatDistanceMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/repeatDistanceUnit" value="1"/>
+ <property key="labeling/reverseDirectionSymbol" value="false"/>
+ <property key="labeling/rightDirectionSymbol" value=">"/>
+ <property key="labeling/scaleMax" value="10000000"/>
+ <property key="labeling/scaleMin" value="1"/>
+ <property key="labeling/scaleVisibility" value="false"/>
+ <property key="labeling/shadowBlendMode" value="6"/>
+ <property key="labeling/shadowColorB" value="0"/>
+ <property key="labeling/shadowColorG" value="0"/>
+ <property key="labeling/shadowColorR" value="0"/>
+ <property key="labeling/shadowDraw" value="false"/>
+ <property key="labeling/shadowOffsetAngle" value="135"/>
+ <property key="labeling/shadowOffsetDist" value="1"/>
+ <property key="labeling/shadowOffsetGlobal" value="true"/>
+ <property key="labeling/shadowOffsetMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shadowOffsetUnits" value="1"/>
+ <property key="labeling/shadowRadius" value="1.5"/>
+ <property key="labeling/shadowRadiusAlphaOnly" value="false"/>
+ <property key="labeling/shadowRadiusMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shadowRadiusUnits" value="1"/>
+ <property key="labeling/shadowScale" value="100"/>
+ <property key="labeling/shadowTransparency" value="30"/>
+ <property key="labeling/shadowUnder" value="0"/>
+ <property key="labeling/shapeBlendMode" value="0"/>
+ <property key="labeling/shapeBorderColorA" value="255"/>
+ <property key="labeling/shapeBorderColorB" value="128"/>
+ <property key="labeling/shapeBorderColorG" value="128"/>
+ <property key="labeling/shapeBorderColorR" value="128"/>
+ <property key="labeling/shapeBorderWidth" value="0"/>
+ <property key="labeling/shapeBorderWidthMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeBorderWidthUnits" value="1"/>
+ <property key="labeling/shapeDraw" value="false"/>
+ <property key="labeling/shapeFillColorA" value="255"/>
+ <property key="labeling/shapeFillColorB" value="255"/>
+ <property key="labeling/shapeFillColorG" value="255"/>
+ <property key="labeling/shapeFillColorR" value="255"/>
+ <property key="labeling/shapeJoinStyle" value="64"/>
+ <property key="labeling/shapeOffsetMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeOffsetUnits" value="1"/>
+ <property key="labeling/shapeOffsetX" value="0"/>
+ <property key="labeling/shapeOffsetY" value="0"/>
+ <property key="labeling/shapeRadiiMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeRadiiUnits" value="1"/>
+ <property key="labeling/shapeRadiiX" value="0"/>
+ <property key="labeling/shapeRadiiY" value="0"/>
+ <property key="labeling/shapeRotation" value="0"/>
+ <property key="labeling/shapeRotationType" value="0"/>
+ <property key="labeling/shapeSVGFile" value=""/>
+ <property key="labeling/shapeSizeMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeSizeType" value="0"/>
+ <property key="labeling/shapeSizeUnits" value="1"/>
+ <property key="labeling/shapeSizeX" value="0"/>
+ <property key="labeling/shapeSizeY" value="0"/>
+ <property key="labeling/shapeTransparency" value="0"/>
+ <property key="labeling/shapeType" value="0"/>
+ <property key="labeling/substitutions" value="<substitutions/>"/>
+ <property key="labeling/textColorA" value="255"/>
+ <property key="labeling/textColorB" value="0"/>
+ <property key="labeling/textColorG" value="0"/>
+ <property key="labeling/textColorR" value="0"/>
+ <property key="labeling/textTransp" value="0"/>
+ <property key="labeling/upsidedownLabels" value="0"/>
+ <property key="labeling/useSubstitutions" value="false"/>
+ <property key="labeling/wrapChar" value=""/>
+ <property key="labeling/xOffset" value="0"/>
+ <property key="labeling/yOffset" value="0"/>
+ <property key="labeling/zIndex" value="0"/>
+ <property key="variableNames"/>
+ <property key="variableValues"/>
+ </customproperties>
+ <blendMode>0</blendMode>
+ <featureBlendMode>0</featureBlendMode>
+ <layerTransparency>0</layerTransparency>
+ <displayfield>Name</displayfield>
+ <label>0</label>
+ <labelattributes>
+ <label fieldname="" text="Label"/>
+ <family fieldname="" name="Cantarell"/>
+ <size fieldname="" units="pt" value="12"/>
+ <bold fieldname="" on="0"/>
+ <italic fieldname="" on="0"/>
+ <underline fieldname="" on="0"/>
+ <strikeout fieldname="" on="0"/>
+ <color fieldname="" red="0" blue="0" green="0"/>
+ <x fieldname=""/>
+ <y fieldname=""/>
+ <offset x="0" y="0" units="pt" yfieldname="" xfieldname=""/>
+ <angle fieldname="" value="0" auto="0"/>
+ <alignment fieldname="" value="center"/>
+ <buffercolor fieldname="" red="255" blue="255" green="255"/>
+ <buffersize fieldname="" units="pt" value="1"/>
+ <bufferenabled fieldname="" on=""/>
+ <multilineenabled fieldname="" on=""/>
+ <selectedonly on=""/>
+ </labelattributes>
+ <SingleCategoryDiagramRenderer diagramType="Histogram" sizeLegend="0" attributeLegend="1">
+ <DiagramCategory penColor="#000000" labelPlacementMethod="XHeight" penWidth="0" diagramOrientation="Up" sizeScale="0,0,0,0,0,0" minimumSize="0" barWidth="5" penAlpha="255" maxScaleDenominator="1e+08" backgroundColor="#ffffff" transparency="0" width="15" scaleDependency="Area" backgroundAlpha="255" angleOffset="1440" scaleBasedVisibility="0" enabled="0" height="15" lineSizeScale="0,0,0,0,0,0" sizeType="MM" lineSizeType="MM" minScaleDenominator="inf">
+ <fontProperties description="Cantarell,11,-1,5,50,0,0,0,0,0" style=""/>
+ </DiagramCategory>
+ <symbol alpha="1" clip_to_extent="1" type="marker" name="sizeSymbol">
+ <layer pass="0" class="SimpleMarker" locked="0">
+ <prop k="angle" v="0"/>
+ <prop k="color" v="255,0,0,255"/>
+ <prop k="horizontal_anchor_point" v="1"/>
+ <prop k="joinstyle" v="bevel"/>
+ <prop k="name" v="circle"/>
+ <prop k="offset" v="0,0"/>
+ <prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="offset_unit" v="MM"/>
+ <prop k="outline_color" v="0,0,0,255"/>
+ <prop k="outline_style" v="solid"/>
+ <prop k="outline_width" v="0"/>
+ <prop k="outline_width_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="outline_width_unit" v="MM"/>
+ <prop k="scale_method" v="diameter"/>
+ <prop k="size" v="2"/>
+ <prop k="size_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="size_unit" v="MM"/>
+ <prop k="vertical_anchor_point" v="1"/>
+ </layer>
+ </symbol>
+ </SingleCategoryDiagramRenderer>
+ <DiagramLayerSettings yPosColumn="-1" showColumn="-1" linePlacementFlags="10" placement="0" dist="0" xPosColumn="-1" priority="0" obstacle="0" zIndex="0" showAll="1"/>
+ <annotationform></annotationform>
+ <aliases>
+ <alias field="Name" index="0" name=""/>
+ <alias field="Value" index="1" name=""/>
+ </aliases>
+ <excludeAttributesWMS/>
+ <excludeAttributesWFS/>
+ <attributeactions default="-1"/>
+ <attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="1664710748">
+ <columns>
+ <column width="-1" hidden="0" type="field" name="Name"/>
+ <column width="-1" hidden="0" type="field" name="Value"/>
+ <column width="-1" hidden="1" type="actions"/>
+ </columns>
+ </attributetableconfig>
+ <editform></editform>
+ <editforminit/>
+ <editforminitcodesource>0</editforminitcodesource>
+ <editforminitfilepath></editforminitfilepath>
+ <editforminitcode><![CDATA[# -*- coding: utf-8 -*-
+"""
+QGIS forms can have a Python function that is called when the form is
+opened.
+
+Use this function to add extra logic to your forms.
+
+Enter the name of the function in the "Python Init function"
+field.
+An example follows:
+"""
+from qgis.PyQt.QtWidgets import QWidget
+
+def my_form_open(dialog, layer, feature):
+ geom = feature.geometry()
+ control = dialog.findChild(QWidget, "MyLineEdit")
+]]></editforminitcode>
+ <featformsuppress>0</featformsuppress>
+ <editorlayout>generatedlayout</editorlayout>
+ <widgets/>
+ <conditionalstyles>
+ <rowstyles/>
+ <fieldstyles/>
+ </conditionalstyles>
+ <defaults>
+ <default field="Name" expression=""/>
+ <default field="Value" expression=""/>
+ </defaults>
+ <previewExpression></previewExpression>
+ <layerGeometryType>2</layerGeometryType>
+</qgis>
diff --git a/tests/testdata/qgis_server/secondlayer.cpg b/tests/testdata/qgis_server/secondlayer.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/tests/testdata/qgis_server/secondlayer.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/tests/testdata/qgis_server/secondlayer.dbf b/tests/testdata/qgis_server/secondlayer.dbf
new file mode 100644
index 0000000..5bbdbe0
Binary files /dev/null and b/tests/testdata/qgis_server/secondlayer.dbf differ
diff --git a/tests/testdata/qgis_server/secondlayer.prj b/tests/testdata/qgis_server/secondlayer.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/tests/testdata/qgis_server/secondlayer.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/tests/testdata/qgis_server/secondlayer.qpj b/tests/testdata/qgis_server/secondlayer.qpj
new file mode 100644
index 0000000..5fbc831
--- /dev/null
+++ b/tests/testdata/qgis_server/secondlayer.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/tests/testdata/qgis_server/secondlayer.shp b/tests/testdata/qgis_server/secondlayer.shp
new file mode 100644
index 0000000..1d4c6f5
Binary files /dev/null and b/tests/testdata/qgis_server/secondlayer.shp differ
diff --git a/tests/testdata/qgis_server/secondlayer.shx b/tests/testdata/qgis_server/secondlayer.shx
new file mode 100644
index 0000000..e90ad05
Binary files /dev/null and b/tests/testdata/qgis_server/secondlayer.shx differ
diff --git a/tests/testdata/qgis_server/test_project_two_layers.qgs b/tests/testdata/qgis_server/test_project_two_layers.qgs
new file mode 100644
index 0000000..5bac44c
--- /dev/null
+++ b/tests/testdata/qgis_server/test_project_two_layers.qgs
@@ -0,0 +1,669 @@
+<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
+<qgis projectname="QGIS Test Project" version="2.18.10">
+ <title>QGIS Test Project</title>
+ <autotransaction active="0"/>
+ <evaluateDefaultValues active="0"/>
+ <layer-tree-group expanded="1" checked="Qt::Checked" name="">
+ <customproperties/>
+ <layer-tree-layer expanded="1" providerKey="ogr" checked="Qt::Checked" id="testlayer20150528120452665" source="/home/cmangeat/sources/QGIS/tests/testdata/qgis_server/testlayer.shp" name="testlayer">
+ <customproperties>
+ <property key="expandedLegendNodes"/>
+ </customproperties>
+ </layer-tree-layer>
+ <layer-tree-layer expanded="1" providerKey="ogr" checked="Qt::Checked" id="secondlayer20170720141616586" source="/home/cmangeat/sources/QGIS/tests/testdata/qgis_server/secondlayer.shp" name="secondlayer">
+ <customproperties/>
+ </layer-tree-layer>
+ </layer-tree-group>
+ <relations/>
+ <mapcanvas>
+ <units>degrees</units>
+ <extent>
+ <xmin>8.20339035499803515</xmin>
+ <ymin>44.90138892949983074</ymin>
+ <xmax>8.20354946347372405</xmax>
+ <ymax>44.90145229128218318</ymax>
+ </extent>
+ <rotation>0</rotation>
+ <projections>1</projections>
+ <destinationsrs>
+ <spatialrefsys>
+ <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
+ <srsid>3452</srsid>
+ <srid>4326</srid>
+ <authid>EPSG:4326</authid>
+ <description>WGS 84</description>
+ <projectionacronym>longlat</projectionacronym>
+ <ellipsoidacronym>WGS84</ellipsoidacronym>
+ <geographicflag>true</geographicflag>
+ </spatialrefsys>
+ </destinationsrs>
+ <rendermaptile>0</rendermaptile>
+ <layer_coordinate_transform_info>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="secondlayer20170720141011864"/>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="secondlayer20170720141616586"/>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="testlayer_copy20170720140930584"/>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="secondlayer20170720135939874"/>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="testlayer20150528120452665"/>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="secondlayer120170720135640422"/>
+ <layer_coordinate_transform destAuthId="EPSG:4326" srcAuthId="EPSG:4326" srcDatumTransform="-1" destDatumTransform="-1" layerid="secondlayer20170720110942139"/>
+ </layer_coordinate_transform_info>
+ </mapcanvas>
+ <layer-tree-canvas>
+ <custom-order enabled="0">
+ <item>testlayer20150528120452665</item>
+ <item>secondlayer20170720141616586</item>
+ </custom-order>
+ </layer-tree-canvas>
+ <legend updateDrawingOrder="true">
+ <legendlayer drawingOrder="-1" open="true" checked="Qt::Checked" name="testlayer" showFeatureCount="0">
+ <filegroup open="true" hidden="false">
+ <legendlayerfile isInOverview="0" layerid="testlayer20150528120452665" visible="1"/>
+ </filegroup>
+ </legendlayer>
+ <legendlayer drawingOrder="-1" open="true" checked="Qt::Checked" name="secondlayer" showFeatureCount="0">
+ <filegroup open="true" hidden="false">
+ <legendlayerfile isInOverview="0" layerid="secondlayer20170720141616586" visible="1"/>
+ </filegroup>
+ </legendlayer>
+ </legend>
+ <projectlayers>
+ <maplayer simplifyAlgorithm="0" minimumScale="0" maximumScale="1e+08" simplifyDrawingHints="1" minLabelScale="0" maxLabelScale="1e+08" simplifyDrawingTol="1" readOnly="0" geometry="Polygon" simplifyMaxScale="1" type="vector" hasScaleBasedVisibilityFlag="0" simplifyLocal="1" scaleBasedLabelVisibilityFlag="0">
+ <id>secondlayer20170720141616586</id>
+ <datasource>./secondlayer.shp</datasource>
+ <keywordList>
+ <value></value>
+ </keywordList>
+ <layername>secondlayer</layername>
+ <srs>
+ <spatialrefsys>
+ <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
+ <srsid>3452</srsid>
+ <srid>4326</srid>
+ <authid>EPSG:4326</authid>
+ <description>WGS 84</description>
+ <projectionacronym>longlat</projectionacronym>
+ <ellipsoidacronym>WGS84</ellipsoidacronym>
+ <geographicflag>true</geographicflag>
+ </spatialrefsys>
+ </srs>
+ <provider encoding="UTF-8">ogr</provider>
+ <vectorjoins/>
+ <layerDependencies/>
+ <expressionfields/>
+ <map-layer-style-manager current="">
+ <map-layer-style name=""/>
+ </map-layer-style-manager>
+ <edittypes>
+ <edittype widgetv2type="TextEdit" name="id">
+ <widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
+ </edittype>
+ </edittypes>
+ <renderer-v2 forceraster="0" symbollevels="0" type="singleSymbol" enableorderby="0">
+ <symbols>
+ <symbol alpha="1" clip_to_extent="1" type="fill" name="0">
+ <layer pass="0" class="SimpleFill" locked="0">
+ <prop k="border_width_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="color" v="152,186,17,255"/>
+ <prop k="joinstyle" v="bevel"/>
+ <prop k="offset" v="0,0"/>
+ <prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="offset_unit" v="MM"/>
+ <prop k="outline_color" v="0,0,0,255"/>
+ <prop k="outline_style" v="solid"/>
+ <prop k="outline_width" v="0.26"/>
+ <prop k="outline_width_unit" v="MM"/>
+ <prop k="style" v="solid"/>
+ </layer>
+ </symbol>
+ </symbols>
+ <rotation/>
+ <sizescale scalemethod="diameter"/>
+ </renderer-v2>
+ <labeling type="simple"/>
+ <customproperties/>
+ <blendMode>0</blendMode>
+ <featureBlendMode>0</featureBlendMode>
+ <layerTransparency>0</layerTransparency>
+ <displayfield>id</displayfield>
+ <label>0</label>
+ <labelattributes>
+ <label fieldname="" text="Label"/>
+ <family fieldname="" name="Ubuntu"/>
+ <size fieldname="" units="pt" value="12"/>
+ <bold fieldname="" on="0"/>
+ <italic fieldname="" on="0"/>
+ <underline fieldname="" on="0"/>
+ <strikeout fieldname="" on="0"/>
+ <color fieldname="" red="0" blue="0" green="0"/>
+ <x fieldname=""/>
+ <y fieldname=""/>
+ <offset x="0" y="0" units="pt" yfieldname="" xfieldname=""/>
+ <angle fieldname="" value="0" auto="0"/>
+ <alignment fieldname="" value="center"/>
+ <buffercolor fieldname="" red="255" blue="255" green="255"/>
+ <buffersize fieldname="" units="pt" value="1"/>
+ <bufferenabled fieldname="" on=""/>
+ <multilineenabled fieldname="" on=""/>
+ <selectedonly on=""/>
+ </labelattributes>
+ <annotationform></annotationform>
+ <aliases>
+ <alias field="id" index="0" name=""/>
+ </aliases>
+ <excludeAttributesWMS/>
+ <excludeAttributesWFS/>
+ <attributeactions default="-1"/>
+ <attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="31675904">
+ <columns/>
+ </attributetableconfig>
+ <editform></editform>
+ <editforminit/>
+ <editforminitcodesource>0</editforminitcodesource>
+ <editforminitfilepath></editforminitfilepath>
+ <editforminitcode><![CDATA[]]></editforminitcode>
+ <featformsuppress>0</featformsuppress>
+ <editorlayout>generatedlayout</editorlayout>
+ <widgets/>
+ <conditionalstyles>
+ <rowstyles/>
+ <fieldstyles/>
+ </conditionalstyles>
+ <defaults>
+ <default field="id" expression=""/>
+ </defaults>
+ <previewExpression></previewExpression>
+ </maplayer>
+ <maplayer simplifyAlgorithm="0" minimumScale="0" maximumScale="1e+08" simplifyDrawingHints="0" minLabelScale="0" maxLabelScale="1e+08" simplifyDrawingTol="1" readOnly="0" geometry="Point" simplifyMaxScale="1" type="vector" hasScaleBasedVisibilityFlag="0" simplifyLocal="1" scaleBasedLabelVisibilityFlag="0">
+ <extent>
+ <xmin>8.20345930703634352</xmin>
+ <ymin>44.90139483904469131</ymin>
+ <xmax>8.20354699399348775</xmax>
+ <ymax>44.90148252600183554</ymax>
+ </extent>
+ <id>testlayer20150528120452665</id>
+ <datasource>./testlayer.shp</datasource>
+ <title>A test vector layer</title>
+ <abstract>A test vector layer with unicode òà</abstract>
+ <keywordList>
+ <value></value>
+ </keywordList>
+ <layername>testlayer</layername>
+ <srs>
+ <spatialrefsys>
+ <proj4>+proj=longlat +datum=WGS84 +no_defs</proj4>
+ <srsid>3452</srsid>
+ <srid>4326</srid>
+ <authid>EPSG:4326</authid>
+ <description>WGS 84</description>
+ <projectionacronym>longlat</projectionacronym>
+ <ellipsoidacronym>WGS84</ellipsoidacronym>
+ <geographicflag>true</geographicflag>
+ </spatialrefsys>
+ </srs>
+ <provider encoding="UTF-8">ogr</provider>
+ <vectorjoins/>
+ <layerDependencies/>
+ <expressionfields/>
+ <map-layer-style-manager current="">
+ <map-layer-style name=""/>
+ </map-layer-style-manager>
+ <edittypes>
+ <edittype widgetv2type="TextEdit" name="id">
+ <widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
+ </edittype>
+ <edittype widgetv2type="TextEdit" name="name">
+ <widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
+ </edittype>
+ <edittype widgetv2type="TextEdit" name="utf8nameè">
+ <widgetv2config IsMultiline="0" fieldEditable="1" constraint="" UseHtml="0" labelOnTop="0" constraintDescription="" notNull="0"/>
+ </edittype>
+ </edittypes>
+ <renderer-v2 forceraster="0" symbollevels="0" type="singleSymbol" enableorderby="0">
+ <symbols>
+ <symbol alpha="1" clip_to_extent="1" type="marker" name="0">
+ <layer pass="0" class="SimpleMarker" locked="0">
+ <prop k="angle" v="0"/>
+ <prop k="color" v="102,164,67,255"/>
+ <prop k="horizontal_anchor_point" v="1"/>
+ <prop k="joinstyle" v="bevel"/>
+ <prop k="name" v="circle"/>
+ <prop k="offset" v="0,0"/>
+ <prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="offset_unit" v="MM"/>
+ <prop k="outline_color" v="0,0,0,255"/>
+ <prop k="outline_style" v="solid"/>
+ <prop k="outline_width" v="0"/>
+ <prop k="outline_width_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="outline_width_unit" v="MM"/>
+ <prop k="scale_method" v="area"/>
+ <prop k="size" v="2"/>
+ <prop k="size_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="size_unit" v="MM"/>
+ <prop k="vertical_anchor_point" v="1"/>
+ <effect enabled="0" type="effectStack">
+ <effect type="drawSource">
+ <prop k="blend_mode" v="0"/>
+ <prop k="draw_mode" v="2"/>
+ <prop k="enabled" v="1"/>
+ <prop k="transparency" v="0"/>
+ </effect>
+ </effect>
+ </layer>
+ </symbol>
+ </symbols>
+ <rotation/>
+ <sizescale scalemethod="diameter"/>
+ <effect enabled="0" type="effectStack">
+ <effect type="drawSource">
+ <prop k="blend_mode" v="0"/>
+ <prop k="draw_mode" v="2"/>
+ <prop k="enabled" v="1"/>
+ <prop k="transparency" v="0"/>
+ </effect>
+ </effect>
+ </renderer-v2>
+ <labeling type="simple"/>
+ <customproperties>
+ <property key="embeddedWidgets/count" value="0"/>
+ <property key="labeling" value="pal"/>
+ <property key="labeling/addDirectionSymbol" value="false"/>
+ <property key="labeling/angleOffset" value="0"/>
+ <property key="labeling/blendMode" value="0"/>
+ <property key="labeling/bufferBlendMode" value="0"/>
+ <property key="labeling/bufferColorA" value="255"/>
+ <property key="labeling/bufferColorB" value="255"/>
+ <property key="labeling/bufferColorG" value="255"/>
+ <property key="labeling/bufferColorR" value="255"/>
+ <property key="labeling/bufferDraw" value="false"/>
+ <property key="labeling/bufferJoinStyle" value="64"/>
+ <property key="labeling/bufferNoFill" value="false"/>
+ <property key="labeling/bufferSize" value="1"/>
+ <property key="labeling/bufferSizeInMapUnits" value="false"/>
+ <property key="labeling/bufferSizeMapUnitMaxScale" value="0"/>
+ <property key="labeling/bufferSizeMapUnitMinScale" value="0"/>
+ <property key="labeling/bufferSizeMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/bufferTransp" value="0"/>
+ <property key="labeling/centroidInside" value="false"/>
+ <property key="labeling/centroidWhole" value="false"/>
+ <property key="labeling/decimals" value="3"/>
+ <property key="labeling/displayAll" value="false"/>
+ <property key="labeling/dist" value="0"/>
+ <property key="labeling/distInMapUnits" value="false"/>
+ <property key="labeling/distMapUnitMaxScale" value="0"/>
+ <property key="labeling/distMapUnitMinScale" value="0"/>
+ <property key="labeling/distMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/drawLabels" value="false"/>
+ <property key="labeling/enabled" value="false"/>
+ <property key="labeling/fieldName" value=""/>
+ <property key="labeling/fitInPolygonOnly" value="false"/>
+ <property key="labeling/fontBold" value="false"/>
+ <property key="labeling/fontCapitals" value="0"/>
+ <property key="labeling/fontFamily" value="Ubuntu"/>
+ <property key="labeling/fontItalic" value="false"/>
+ <property key="labeling/fontLetterSpacing" value="0"/>
+ <property key="labeling/fontLimitPixelSize" value="false"/>
+ <property key="labeling/fontMaxPixelSize" value="10000"/>
+ <property key="labeling/fontMinPixelSize" value="3"/>
+ <property key="labeling/fontSize" value="9"/>
+ <property key="labeling/fontSizeInMapUnits" value="false"/>
+ <property key="labeling/fontSizeMapUnitMaxScale" value="0"/>
+ <property key="labeling/fontSizeMapUnitMinScale" value="0"/>
+ <property key="labeling/fontSizeMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/fontStrikeout" value="false"/>
+ <property key="labeling/fontUnderline" value="false"/>
+ <property key="labeling/fontWeight" value="63"/>
+ <property key="labeling/fontWordSpacing" value="0"/>
+ <property key="labeling/formatNumbers" value="false"/>
+ <property key="labeling/isExpression" value="true"/>
+ <property key="labeling/labelOffsetInMapUnits" value="true"/>
+ <property key="labeling/labelOffsetMapUnitMaxScale" value="0"/>
+ <property key="labeling/labelOffsetMapUnitMinScale" value="0"/>
+ <property key="labeling/labelOffsetMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/labelPerPart" value="false"/>
+ <property key="labeling/leftDirectionSymbol" value="<"/>
+ <property key="labeling/limitNumLabels" value="false"/>
+ <property key="labeling/maxCurvedCharAngleIn" value="20"/>
+ <property key="labeling/maxCurvedCharAngleOut" value="-20"/>
+ <property key="labeling/maxNumLabels" value="2000"/>
+ <property key="labeling/mergeLines" value="false"/>
+ <property key="labeling/minFeatureSize" value="0"/>
+ <property key="labeling/multilineAlign" value="0"/>
+ <property key="labeling/multilineHeight" value="1"/>
+ <property key="labeling/namedStyle" value="Medium"/>
+ <property key="labeling/obstacle" value="true"/>
+ <property key="labeling/obstacleFactor" value="1"/>
+ <property key="labeling/obstacleType" value="0"/>
+ <property key="labeling/offsetType" value="0"/>
+ <property key="labeling/placeDirectionSymbol" value="0"/>
+ <property key="labeling/placement" value="0"/>
+ <property key="labeling/placementFlags" value="0"/>
+ <property key="labeling/plussign" value="false"/>
+ <property key="labeling/predefinedPositionOrder" value="TR,TL,BR,BL,R,L,TSR,BSR"/>
+ <property key="labeling/preserveRotation" value="true"/>
+ <property key="labeling/previewBkgrdColor" value="#ffffff"/>
+ <property key="labeling/priority" value="5"/>
+ <property key="labeling/quadOffset" value="4"/>
+ <property key="labeling/repeatDistance" value="0"/>
+ <property key="labeling/repeatDistanceMapUnitMaxScale" value="0"/>
+ <property key="labeling/repeatDistanceMapUnitMinScale" value="0"/>
+ <property key="labeling/repeatDistanceMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/repeatDistanceUnit" value="1"/>
+ <property key="labeling/reverseDirectionSymbol" value="false"/>
+ <property key="labeling/rightDirectionSymbol" value=">"/>
+ <property key="labeling/scaleMax" value="10000000"/>
+ <property key="labeling/scaleMin" value="1"/>
+ <property key="labeling/scaleVisibility" value="false"/>
+ <property key="labeling/shadowBlendMode" value="6"/>
+ <property key="labeling/shadowColorB" value="0"/>
+ <property key="labeling/shadowColorG" value="0"/>
+ <property key="labeling/shadowColorR" value="0"/>
+ <property key="labeling/shadowDraw" value="false"/>
+ <property key="labeling/shadowOffsetAngle" value="135"/>
+ <property key="labeling/shadowOffsetDist" value="1"/>
+ <property key="labeling/shadowOffsetGlobal" value="true"/>
+ <property key="labeling/shadowOffsetMapUnitMaxScale" value="0"/>
+ <property key="labeling/shadowOffsetMapUnitMinScale" value="0"/>
+ <property key="labeling/shadowOffsetMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shadowOffsetUnits" value="1"/>
+ <property key="labeling/shadowRadius" value="1.5"/>
+ <property key="labeling/shadowRadiusAlphaOnly" value="false"/>
+ <property key="labeling/shadowRadiusMapUnitMaxScale" value="0"/>
+ <property key="labeling/shadowRadiusMapUnitMinScale" value="0"/>
+ <property key="labeling/shadowRadiusMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shadowRadiusUnits" value="1"/>
+ <property key="labeling/shadowScale" value="100"/>
+ <property key="labeling/shadowTransparency" value="30"/>
+ <property key="labeling/shadowUnder" value="0"/>
+ <property key="labeling/shapeBlendMode" value="0"/>
+ <property key="labeling/shapeBorderColorA" value="255"/>
+ <property key="labeling/shapeBorderColorB" value="128"/>
+ <property key="labeling/shapeBorderColorG" value="128"/>
+ <property key="labeling/shapeBorderColorR" value="128"/>
+ <property key="labeling/shapeBorderWidth" value="0"/>
+ <property key="labeling/shapeBorderWidthMapUnitMaxScale" value="0"/>
+ <property key="labeling/shapeBorderWidthMapUnitMinScale" value="0"/>
+ <property key="labeling/shapeBorderWidthMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeBorderWidthUnits" value="1"/>
+ <property key="labeling/shapeDraw" value="false"/>
+ <property key="labeling/shapeFillColorA" value="255"/>
+ <property key="labeling/shapeFillColorB" value="255"/>
+ <property key="labeling/shapeFillColorG" value="255"/>
+ <property key="labeling/shapeFillColorR" value="255"/>
+ <property key="labeling/shapeJoinStyle" value="64"/>
+ <property key="labeling/shapeOffsetMapUnitMaxScale" value="0"/>
+ <property key="labeling/shapeOffsetMapUnitMinScale" value="0"/>
+ <property key="labeling/shapeOffsetMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeOffsetUnits" value="1"/>
+ <property key="labeling/shapeOffsetX" value="0"/>
+ <property key="labeling/shapeOffsetY" value="0"/>
+ <property key="labeling/shapeRadiiMapUnitMaxScale" value="0"/>
+ <property key="labeling/shapeRadiiMapUnitMinScale" value="0"/>
+ <property key="labeling/shapeRadiiMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeRadiiUnits" value="1"/>
+ <property key="labeling/shapeRadiiX" value="0"/>
+ <property key="labeling/shapeRadiiY" value="0"/>
+ <property key="labeling/shapeRotation" value="0"/>
+ <property key="labeling/shapeRotationType" value="0"/>
+ <property key="labeling/shapeSVGFile" value=""/>
+ <property key="labeling/shapeSizeMapUnitMaxScale" value="0"/>
+ <property key="labeling/shapeSizeMapUnitMinScale" value="0"/>
+ <property key="labeling/shapeSizeMapUnitScale" value="0,0,0,0,0,0"/>
+ <property key="labeling/shapeSizeType" value="0"/>
+ <property key="labeling/shapeSizeUnits" value="1"/>
+ <property key="labeling/shapeSizeX" value="0"/>
+ <property key="labeling/shapeSizeY" value="0"/>
+ <property key="labeling/shapeTransparency" value="0"/>
+ <property key="labeling/shapeType" value="0"/>
+ <property key="labeling/substitutions" value="<substitutions/>"/>
+ <property key="labeling/textColorA" value="255"/>
+ <property key="labeling/textColorB" value="0"/>
+ <property key="labeling/textColorG" value="0"/>
+ <property key="labeling/textColorR" value="0"/>
+ <property key="labeling/textTransp" value="0"/>
+ <property key="labeling/upsidedownLabels" value="0"/>
+ <property key="labeling/useSubstitutions" value="false"/>
+ <property key="labeling/wrapChar" value=""/>
+ <property key="labeling/xOffset" value="0"/>
+ <property key="labeling/yOffset" value="0"/>
+ <property key="labeling/zIndex" value="0"/>
+ <property key="variableNames"/>
+ <property key="variableValues"/>
+ </customproperties>
+ <blendMode>0</blendMode>
+ <featureBlendMode>0</featureBlendMode>
+ <layerTransparency>0</layerTransparency>
+ <displayfield>name</displayfield>
+ <label>0</label>
+ <labelattributes>
+ <label fieldname="" text="Label"/>
+ <family fieldname="" name="Ubuntu"/>
+ <size fieldname="" units="pt" value="12"/>
+ <bold fieldname="" on="0"/>
+ <italic fieldname="" on="0"/>
+ <underline fieldname="" on="0"/>
+ <strikeout fieldname="" on="0"/>
+ <color fieldname="" red="0" blue="0" green="0"/>
+ <x fieldname=""/>
+ <y fieldname=""/>
+ <offset x="0" y="0" units="pt" yfieldname="" xfieldname=""/>
+ <angle fieldname="" value="0" auto="0"/>
+ <alignment fieldname="" value="center"/>
+ <buffercolor fieldname="" red="255" blue="255" green="255"/>
+ <buffersize fieldname="" units="pt" value="1"/>
+ <bufferenabled fieldname="" on=""/>
+ <multilineenabled fieldname="" on=""/>
+ <selectedonly on=""/>
+ </labelattributes>
+ <SingleCategoryDiagramRenderer diagramType="Pie" sizeLegend="0" attributeLegend="1">
+ <DiagramCategory penColor="#000000" labelPlacementMethod="XHeight" penWidth="0" diagramOrientation="Up" sizeScale="0,0,0,0,0,0" minimumSize="0" barWidth="5" penAlpha="255" maxScaleDenominator="1e+08" backgroundColor="#ffffff" transparency="0" width="15" scaleDependency="Area" backgroundAlpha="255" angleOffset="1440" scaleBasedVisibility="0" enabled="0" height="15" lineSizeScale="0,0,0,0,0,0" sizeType="MM" lineSizeType="MM" minScaleDenominator="inf">
+ <fontProperties description="Ubuntu,9,-1,5,50,0,0,0,0,0" style=""/>
+ <attribute field="" color="#000000" label=""/>
+ </DiagramCategory>
+ <symbol alpha="1" clip_to_extent="1" type="marker" name="sizeSymbol">
+ <layer pass="0" class="SimpleMarker" locked="0">
+ <prop k="angle" v="0"/>
+ <prop k="color" v="255,0,0,255"/>
+ <prop k="horizontal_anchor_point" v="1"/>
+ <prop k="joinstyle" v="bevel"/>
+ <prop k="name" v="circle"/>
+ <prop k="offset" v="0,0"/>
+ <prop k="offset_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="offset_unit" v="MM"/>
+ <prop k="outline_color" v="0,0,0,255"/>
+ <prop k="outline_style" v="solid"/>
+ <prop k="outline_width" v="0"/>
+ <prop k="outline_width_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="outline_width_unit" v="MM"/>
+ <prop k="scale_method" v="diameter"/>
+ <prop k="size" v="2"/>
+ <prop k="size_map_unit_scale" v="0,0,0,0,0,0"/>
+ <prop k="size_unit" v="MM"/>
+ <prop k="vertical_anchor_point" v="1"/>
+ </layer>
+ </symbol>
+ </SingleCategoryDiagramRenderer>
+ <DiagramLayerSettings yPosColumn="-1" showColumn="0" linePlacementFlags="10" placement="0" dist="0" xPosColumn="-1" priority="0" obstacle="0" zIndex="0" showAll="1"/>
+ <annotationform>.</annotationform>
+ <aliases>
+ <alias field="id" index="0" name=""/>
+ <alias field="name" index="1" name=""/>
+ <alias field="utf8nameè" index="2" name=""/>
+ </aliases>
+ <excludeAttributesWMS/>
+ <excludeAttributesWFS/>
+ <attributeactions default="-1"/>
+ <attributetableconfig actionWidgetStyle="dropDown" sortExpression="" sortOrder="0">
+ <columns>
+ <column width="-1" hidden="0" type="field" name="id"/>
+ <column width="-1" hidden="0" type="field" name="name"/>
+ <column width="-1" hidden="0" type="field" name="utf8nameè"/>
+ <column width="-1" hidden="1" type="actions"/>
+ </columns>
+ </attributetableconfig>
+ <editform>.</editform>
+ <editforminit/>
+ <editforminitcodesource>0</editforminitcodesource>
+ <editforminitfilepath>.</editforminitfilepath>
+ <editforminitcode><![CDATA[# -*- coding: utf-8 -*-
+"""
+QGIS forms can have a Python function that is called when the form is
+opened.
+
+Use this function to add extra logic to your forms.
+
+Enter the name of the function in the "Python Init function"
+field.
+An example follows:
+"""
+from qgis.PyQt.QtWidgets import QWidget
+
+def my_form_open(dialog, layer, feature):
+ geom = feature.geometry()
+ control = dialog.findChild(QWidget, "MyLineEdit")
+]]></editforminitcode>
+ <featformsuppress>0</featformsuppress>
+ <editorlayout>generatedlayout</editorlayout>
+ <widgets>
+ <widget name="utf8name">
+ <config>
+ <option key="IsMultiline" value="false"/>
+ <option key="UseHtml" value="false"/>
+ </config>
+ </widget>
+ </widgets>
+ <conditionalstyles>
+ <rowstyles/>
+ <fieldstyles/>
+ </conditionalstyles>
+ <defaults>
+ <default field="id" expression=""/>
+ <default field="name" expression=""/>
+ <default field="utf8nameè" expression=""/>
+ </defaults>
+ <previewExpression>COALESCE( "name", '<NULL>' )</previewExpression>
+ </maplayer>
+ </projectlayers>
+ <properties>
+ <WMSUrl type="QString"></WMSUrl>
+ <SpatialRefSys>
+ <ProjectCRSProj4String type="QString">+proj=longlat +datum=WGS84 +no_defs</ProjectCRSProj4String>
+ <ProjectCrs type="QString">EPSG:4326</ProjectCrs>
+ <ProjectCRSID type="int">3452</ProjectCRSID>
+ <ProjectionsEnabled type="int">1</ProjectionsEnabled>
+ </SpatialRefSys>
+ <Measurement>
+ <DistanceUnits type="QString">meters</DistanceUnits>
+ <AreaUnits type="QString">m2</AreaUnits>
+ </Measurement>
+ <Legend>
+ <filterByMap type="bool">false</filterByMap>
+ </Legend>
+ <WMSExtent type="QStringList">
+ <value>8.20315414376310059</value>
+ <value>44.901236559338642</value>
+ <value>8.204164917965862</value>
+ <value>44.90159838674664172</value>
+ </WMSExtent>
+ <DefaultStyles>
+ <Fill type="QString"></Fill>
+ <Line type="QString"></Line>
+ <Marker type="QString"></Marker>
+ <RandomColors type="bool">true</RandomColors>
+ <AlphaInt type="int">255</AlphaInt>
+ <ColorRamp type="QString"></ColorRamp>
+ </DefaultStyles>
+ <WMSAccessConstraints type="QString">None</WMSAccessConstraints>
+ <WMSSegmentizeFeatureInfoGeometry type="bool">false</WMSSegmentizeFeatureInfoGeometry>
+ <WMSContactMail type="QString">elpaso at itopen.it</WMSContactMail>
+ <WMSImageQuality type="int">90</WMSImageQuality>
+ <WFSLayersPrecision>
+ <secondlayer20170720141011864 type="int">8</secondlayer20170720141011864>
+ <secondlayer20170720141616586 type="int">8</secondlayer20170720141616586>
+ <secondlayer20170720135939874 type="int">8</secondlayer20170720135939874>
+ <testlayer20150528120452665 type="int">8</testlayer20150528120452665>
+ <secondlayer20170720110942139 type="int">8</secondlayer20170720110942139>
+ </WFSLayersPrecision>
+ <WMSRestrictedComposers type="QStringList"/>
+ <WMSServiceTitle type="QString">QGIS TestProject</WMSServiceTitle>
+ <WMSContactPhone type="QString"></WMSContactPhone>
+ <WFSTLayers>
+ <Insert type="QStringList"/>
+ <Update type="QStringList"/>
+ <Delete type="QStringList"/>
+ </WFSTLayers>
+ <WCSLayers type="QStringList"/>
+ <WMSRestrictedLayers type="QStringList"/>
+ <WMSFees type="QString">conditions unknown</WMSFees>
+ <Macros>
+ <pythonCode type="QString"></pythonCode>
+ </Macros>
+ <WMSAddWktGeometry type="bool">true</WMSAddWktGeometry>
+ <WCSUrl type="QString"></WCSUrl>
+ <WMSOnlineResource type="QString"></WMSOnlineResource>
+ <WMSPrecision type="QString">4</WMSPrecision>
+ <Digitizing>
+ <DefaultSnapToleranceUnit type="int">2</DefaultSnapToleranceUnit>
+ <LayerSnappingList type="QStringList">
+ <value>testlayer20150528120452665</value>
+ </LayerSnappingList>
+ <LayerSnappingEnabledList type="QStringList">
+ <value>disabled</value>
+ </LayerSnappingEnabledList>
+ <SnappingMode type="QString">current_layer</SnappingMode>
+ <AvoidIntersectionsList type="QStringList"/>
+ <LayerSnappingToleranceUnitList type="QStringList">
+ <value>2</value>
+ </LayerSnappingToleranceUnitList>
+ <LayerSnapToList type="QStringList">
+ <value>to_vertex_and_segment</value>
+ </LayerSnapToList>
+ <DefaultSnapType type="QString">off</DefaultSnapType>
+ <DefaultSnapTolerance type="double">0</DefaultSnapTolerance>
+ <LayerSnappingToleranceList type="QStringList">
+ <value>0.000000</value>
+ </LayerSnappingToleranceList>
+ </Digitizing>
+ <Identify>
+ <disabledLayers type="QStringList"/>
+ </Identify>
+ <WMSContactPerson type="QString">Alessandro Pasotti</WMSContactPerson>
+ <WMSContactOrganization type="QString">QGIS dev team</WMSContactOrganization>
+ <WMSKeywordList type="QStringList">
+ <value></value>
+ </WMSKeywordList>
+ <Variables>
+ <variableNames type="QStringList"/>
+ <variableValues type="QStringList"/>
+ </Variables>
+ <Paths>
+ <Absolute type="bool">false</Absolute>
+ </Paths>
+ <WMSContactPosition type="QString"></WMSContactPosition>
+ <PositionPrecision>
+ <DecimalPlaces type="int">2</DecimalPlaces>
+ <Automatic type="bool">true</Automatic>
+ <DegreeFormat type="QString">D</DegreeFormat>
+ </PositionPrecision>
+ <Gui>
+ <SelectionColorBluePart type="int">0</SelectionColorBluePart>
+ <CanvasColorGreenPart type="int">255</CanvasColorGreenPart>
+ <CanvasColorRedPart type="int">255</CanvasColorRedPart>
+ <SelectionColorRedPart type="int">255</SelectionColorRedPart>
+ <SelectionColorAlphaPart type="int">255</SelectionColorAlphaPart>
+ <SelectionColorGreenPart type="int">255</SelectionColorGreenPart>
+ <CanvasColorBluePart type="int">255</CanvasColorBluePart>
+ </Gui>
+ <Measure>
+ <Ellipsoid type="QString">WGS84</Ellipsoid>
+ </Measure>
+ <WMSServiceAbstract type="QString">Some UTF8 text èòù</WMSServiceAbstract>
+ <WFSLayers type="QStringList">
+ <value>secondlayer20170720141616586</value>
+ <value>testlayer20150528120452665</value>
+ </WFSLayers>
+ <WFSUrl type="QString"></WFSUrl>
+ <WMSServiceCapabilities type="bool">true</WMSServiceCapabilities>
+ <WMSUseLayerIDs type="bool">false</WMSUseLayerIDs>
+ </properties>
+ <visibility-presets/>
+</qgis>
diff --git a/tests/testdata/qgis_server/wfs_getfeature_multiple.txt b/tests/testdata/qgis_server/wfs_getfeature_multiple.txt
new file mode 100644
index 0000000..231ce51
--- /dev/null
+++ b/tests/testdata/qgis_server/wfs_getfeature_multiple.txt
@@ -0,0 +1,97 @@
+Content-Type: text/xml; charset=utf-8
+
+<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd http://www.qgis.org/gml http:?SERVICE=WFS&VERSION=1.0.0&REQUEST=DescribeFeatureT [...]
+ <gml:Box srsName="EPSG:4326">
+ <gml:coordinates cs="," ts=" ">8.20345816,44.90140323 8.2035369,44.9014747</gml:coordinates>
+ </gml:Box>
+</gml:boundedBy>
+<gml:featureMember>
+ <qgs:secondlayer fid="secondlayer.0">
+ <gml:boundedBy>
+ <gml:Box srsName="EPSG:4326">
+ <gml:coordinates cs="," ts=" ">8.20345817,44.9014216 8.20350448,44.90147469</gml:coordinates>
+ </gml:Box>
+ </gml:boundedBy>
+ <qgs:geometry>
+ <Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
+ <outerBoundaryIs xmlns="http://www.opengis.net/gml">
+ <LinearRing xmlns="http://www.opengis.net/gml">
+ <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20348959,44.90147469 8.20350448,44.90142541 8.20346478,44.9014216 8.20345817,44.90145485 8.20347768,44.90144674 8.20350018,44.90146576 8.20348959,44.90147469</coordinates>
+ </LinearRing>
+ </outerBoundaryIs>
+ </Polygon>
+ </qgs:geometry>
+ <qgs:id>42</qgs:id>
+ </qgs:secondlayer>
+</gml:featureMember>
+<gml:featureMember>
+ <qgs:secondlayer fid="secondlayer.1">
+ <gml:boundedBy>
+ <gml:Box srsName="EPSG:4326">
+ <gml:coordinates cs="," ts=" ">8.20348728,44.90140324 8.20353689,44.90143798</gml:coordinates>
+ </gml:Box>
+ </gml:boundedBy>
+ <qgs:geometry>
+ <Polygon xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
+ <outerBoundaryIs xmlns="http://www.opengis.net/gml">
+ <LinearRing xmlns="http://www.opengis.net/gml">
+ <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20348728,44.90140523 8.20352664,44.90143798 8.20353689,44.90142011 8.20349885,44.90140324 8.20348728,44.90140523</coordinates>
+ </LinearRing>
+ </outerBoundaryIs>
+ </Polygon>
+ </qgs:geometry>
+ <qgs:id>43</qgs:id>
+ </qgs:secondlayer>
+</gml:featureMember>
+<gml:featureMember>
+ <qgs:testlayer fid="testlayer.0">
+ <gml:boundedBy>
+ <gml:Box srsName="EPSG:4326">
+ <gml:coordinates cs="," ts=" ">8.20349634,44.90148253 8.20349634,44.90148253</gml:coordinates>
+ </gml:Box>
+ </gml:boundedBy>
+ <qgs:geometry>
+ <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
+ <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20349634,44.90148253</coordinates>
+ </Point>
+ </qgs:geometry>
+ <qgs:id>1</qgs:id>
+ <qgs:name>one</qgs:name>
+ <qgs:utf8nameè>one èé</qgs:utf8nameè>
+ </qgs:testlayer>
+</gml:featureMember>
+<gml:featureMember>
+ <qgs:testlayer fid="testlayer.1">
+ <gml:boundedBy>
+ <gml:Box srsName="EPSG:4326">
+ <gml:coordinates cs="," ts=" ">8.20354699,44.90143568 8.20354699,44.90143568</gml:coordinates>
+ </gml:Box>
+ </gml:boundedBy>
+ <qgs:geometry>
+ <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
+ <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20354699,44.90143568</coordinates>
+ </Point>
+ </qgs:geometry>
+ <qgs:id>2</qgs:id>
+ <qgs:name>two</qgs:name>
+ <qgs:utf8nameè>two àò</qgs:utf8nameè>
+ </qgs:testlayer>
+</gml:featureMember>
+<gml:featureMember>
+ <qgs:testlayer fid="testlayer.2">
+ <gml:boundedBy>
+ <gml:Box srsName="EPSG:4326">
+ <gml:coordinates cs="," ts=" ">8.20345931,44.90139484 8.20345931,44.90139484</gml:coordinates>
+ </gml:Box>
+ </gml:boundedBy>
+ <qgs:geometry>
+ <Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
+ <coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20345931,44.90139484</coordinates>
+ </Point>
+ </qgs:geometry>
+ <qgs:id>3</qgs:id>
+ <qgs:name>three</qgs:name>
+ <qgs:utf8nameè>three èé↓</qgs:utf8nameè>
+ </qgs:testlayer>
+</gml:featureMember>
+</wfs:FeatureCollection>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/qgis.git
More information about the Pkg-grass-devel
mailing list