[Git][debian-gis-team/saga][upstream] New upstream version 9.3.2+dfsg

Bas Couwenberg (@sebastic) gitlab at salsa.debian.org
Wed Mar 13 04:50:52 GMT 2024



Bas Couwenberg pushed to branch upstream at Debian GIS Project / saga


Commits:
b55c37e5 by Bas Couwenberg at 2024-03-13T05:34:20+01:00
New upstream version 9.3.2+dfsg
- - - - -


29 changed files:

- saga-gis/src/accessories/helper/doxygen_saga_api_chm
- saga-gis/src/accessories/helper/doxygen_saga_api_html
- saga-gis/src/accessories/helper/make_saga_release.bat
- saga-gis/src/accessories/helper/saga_setup_x64.iss
- saga-gis/src/accessories/python/helper.py
- saga-gis/src/accessories/python/tools/climate_tools.py
- saga-gis/src/accessories/python/tools/grid_analysis.py
- saga-gis/src/accessories/python/tools/grid_gridding.py
- saga-gis/src/accessories/python/tools/grids_tools.py
- saga-gis/src/accessories/python/tools/imagery_classification.py
- saga-gis/src/accessories/python/tools/imagery_segmentation.py
- saga-gis/src/accessories/python/tools/statistics_grid.py
- saga-gis/src/accessories/python/tools/statistics_regression.py
- saga-gis/src/accessories/python/tools/ta_lighting.py
- saga-gis/src/accessories/python/tools/ta_morphometry.py
- saga-gis/src/saga_core/saga_api/geo_classes.cpp
- saga-gis/src/saga_core/saga_api/mat_tools.h
- saga-gis/src/saga_core/saga_api/parameter.cpp
- saga-gis/src/saga_core/saga_api/parameters.cpp
- saga-gis/src/saga_core/saga_api/saga_api.h
- saga-gis/src/saga_core/saga_cmd/man/saga_cmd.1
- saga-gis/src/saga_core/saga_gui/man/saga_gui.1
- saga-gis/src/tools/imagery/imagery_classification/classify_cluster_analysis.cpp
- saga-gis/src/tools/projection/pj_proj4/crs_transform_coords.cpp
- saga-gis/src/tools/projection/pj_proj4/crs_transform_coords.h
- saga-gis/src/tools/projection/pj_proj4/crs_transform_grid.cpp
- saga-gis/src/tools/shapes/shapes_grid/Grid_To_Contour.cpp
- saga-gis/src/tools/statistics/statistics_regression/point_multi_grid_regression.cpp
- saga-gis/version.cmake


Changes:

=====================================
saga-gis/src/accessories/helper/doxygen_saga_api_chm
=====================================
@@ -38,7 +38,7 @@ PROJECT_NAME           = "SAGA API"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-#PROJECT_NUMBER        = v9.3.1 # omit patch number
+#PROJECT_NUMBER        = v9.3.2 # omit patch number
 PROJECT_NUMBER         = v9.3
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
@@ -59,7 +59,7 @@ PROJECT_LOGO           = ../../../saga_core/saga_gui/res/saga_icon_64.png
 # entered, it will be relative to the location where doxygen was started. If
 # left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = saga-9.3.1_api_doc
+OUTPUT_DIRECTORY       = saga-9.3.2_api_doc
 
 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 # directories (in 2 levels) under the output directory of each output format and
@@ -1372,7 +1372,7 @@ GENERATE_HTMLHELP      = YES
 # written to the html output directory.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
-CHM_FILE               = ../../saga-9.3.1_api.chm
+CHM_FILE               = ../../saga-9.3.2_api.chm
 
 # The HHC_LOCATION tag can be used to specify the location (absolute path
 # including file name) of the HTML help compiler (hhc.exe). If non-empty,


=====================================
saga-gis/src/accessories/helper/doxygen_saga_api_html
=====================================
@@ -38,7 +38,7 @@ PROJECT_NAME           = "SAGA API"
 # could be handy for archiving the generated documentation or if some version
 # control system is used.
 
-#PROJECT_NUMBER        = v9.3.1 # omit patch number
+#PROJECT_NUMBER        = v9.3.2 # omit patch number
 PROJECT_NUMBER         = v9.3
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
@@ -59,7 +59,7 @@ PROJECT_LOGO           = ../../../saga_core/saga_gui/res/saga_icon_64.png
 # entered, it will be relative to the location where doxygen was started. If
 # left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = saga-9.3.1_api_doc
+OUTPUT_DIRECTORY       = saga-9.3.2_api_doc
 
 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 # directories (in 2 levels) under the output directory of each output format and
@@ -1372,7 +1372,7 @@ GENERATE_HTMLHELP      = NO
 # written to the html output directory.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
-CHM_FILE               = ../../saga-9.3.1_api.chm
+CHM_FILE               = ../../saga-9.3.2_api.chm
 
 # The HHC_LOCATION tag can be used to specify the location (absolute path
 # including file name) of the HTML help compiler (hhc.exe). If non-empty,


=====================================
saga-gis/src/accessories/helper/make_saga_release.bat
=====================================
@@ -30,9 +30,9 @@ REM ___________________________________
 REM Version
 
 SET SAGA_VERSION=9.3
-SET SAGA_RELEASE=9.3.1
+SET SAGA_RELEASE=9.3.2
 SET SAGA_VERSION_NEXT=9.4
-SET SAGA_RELEASE_NEXT=9.4.0
+SET SAGA_RELEASE_NEXT=9.3.1
 SET SAGA_RELEASE_NAME=saga-%SAGA_RELEASE%
 
 REM !!! For all bug-fix-releases !!!


=====================================
saga-gis/src/accessories/helper/saga_setup_x64.iss
=====================================
@@ -1,5 +1,5 @@
-; To build installer (for example, saga-9.3.1_setup.exe).
-; - Unzip the SAGA binary files in their own folder (for example, saga-9.3.1.zip).
+; To build installer (for example, saga-9.3.2_setup.exe).
+; - Unzip the SAGA binary files in their own folder (for example, saga-9.3.2.zip).
 ; - Place saga.iss and saga_readme.rtf in the SAGA folder (contains saga_gui.exe, etc.).
 ; - Open saga.iss in Inno Setup.
 ; - Choose Build | Compile.
@@ -7,7 +7,7 @@
 
 [Setup]
 AppName=SAGA - System for Automated Geoscientific Analyses
-AppVerName=SAGA 9.3.1
+AppVerName=SAGA 9.3.2
 
 ArchitecturesAllowed=x64
 ArchitecturesInstallIn64BitMode=x64
@@ -22,9 +22,9 @@ Compression=lzma
 SolidCompression=yes
 
 OutputDir=.
-OutputBaseFilename=saga-9.3.1_x64_setup
+OutputBaseFilename=saga-9.3.2_x64_setup
 
-VersionInfoVersion=9.3.1.0
+VersionInfoVersion=9.3.2.0
 VersionInfoCompany=SAGA User Group Association
 VersionInfoCopyright=(c) 2005-2023 by O. Conrad
 VersionInfoDescription=SAGA single-file installer
@@ -51,5 +51,5 @@ Name: "{commondesktop}\SAGA"; Filename: "{app}\saga_gui.exe"; WorkingDir: "{app}
 Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\saga_gui.exe"; ValueType: string; ValueName: ""; ValueData: "{app}\saga_gui.exe"; Flags: uninsdeletekey
 Root: HKLM; Subkey: "SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\saga_gui.exe"; ValueType: string; ValueName: "Path"; ValueData: "{app}"
 
-Root: HKLM; Subkey: "SOFTWARE\SAGA User Group Association\SAGA\9.3.1"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey
-Root: HKLM; Subkey: "SOFTWARE\SAGA User Group Association\SAGA\9.3.1"; ValueType: string; ValueName: "Version"; ValueData: "9.3.1.0"
+Root: HKLM; Subkey: "SOFTWARE\SAGA User Group Association\SAGA\9.3.2"; ValueType: string; ValueName: "InstallDir"; ValueData: "{app}"; Flags: uninsdeletekey
+Root: HKLM; Subkey: "SOFTWARE\SAGA User Group Association\SAGA\9.3.2"; ValueType: string; ValueName: "Version"; ValueData: "9.3.2.0"


=====================================
saga-gis/src/accessories/python/helper.py
=====================================
@@ -381,7 +381,7 @@ class Tool_Wrapper:
 
     #____________________________________
     def Set_Output(self, ID, Object):
-        if self.is_Okay():
+        if self.is_Okay() and Object:
             self.Output.append([ID, Object])
 
     #____________________________________


=====================================
saga-gis/src/accessories/python/tools/climate_tools.py
=====================================
@@ -329,8 +329,8 @@ def Run_Evapotranspiration_Grid(T=None, T_MIN=None, T_MAX=None, RH=None, SR=None
     - SR_EST [`boolean`] : Estimate Solar Radiation. Default: 0 Estimate solar radiation from date, latitudinal position and sunshine duration as percentage of its potential maximum.
     - SUNSHINE [`floating point number`] : Sunshine Duration. Minimum: 0.000000 Maximum: 100.000000 Default: 50.000000 Daily sunshine duration as percentage of its potential maximum.
     - TIME [`choice`] : Time. Available Choices: [0] day [1] month Default: 0
-    - MONTH [`choice`] : Month. Available Choices: [0] January [1] February [2] March [3] April [4] May [5] June [6] July [7] August [8] September [9] October [10] November [11] December Default: 0
-    - DAY [`integer number`] : Day of Month. Minimum: 1 Maximum: 31 Default: 23
+    - MONTH [`choice`] : Month. Available Choices: [0] January [1] February [2] March [3] April [4] May [5] June [6] July [7] August [8] September [9] October [10] November [11] December Default: 2
+    - DAY [`integer number`] : Day of Month. Minimum: 1 Maximum: 31 Default: 12
     - LAT [`floating point number`] : Latitude. Minimum: -90.000000 Maximum: 90.000000 Default: 53.000000 [Degree]
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
@@ -377,7 +377,7 @@ def Run_Sunrise_and_Sunset(TARGET=None, SUNRISE=None, SUNSET=None, LENGTH=None,
     - SUNRISE [`output grid`] : Sunrise
     - SUNSET [`output grid`] : Sunset
     - LENGTH [`output grid`] : Day Length
-    - DAY [`date`] : Day of Month. Default: 2024-01-24
+    - DAY [`date`] : Day of Month. Default: 2024-03-12
     - TIME [`choice`] : Time. Available Choices: [0] local [1] world Default: 0
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
@@ -983,7 +983,7 @@ def Run_PhenIps_Grids_Days(ATMEAN=None, ATMAX=None, SIREL=None, LAT_GRID=None, G
     - YD_END_ONSET [`date`] : End of Breeding. Default: 2024-08-31
     - YD_END [`date`] : End of Development. Default: 2024-10-31
     - RESET [`boolean`] : Reset. Default: 1
-    - DAY [`date`] : Start Day. Default: 2024-01-24
+    - DAY [`date`] : Start Day. Default: 2024-03-12
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -1051,7 +1051,7 @@ def Run_Soil_Water_Balance_Days(TAVG=None, TMIN=None, TMAX=None, PSUM=None, LAT_
     - SWC_SURFACE [`floating point number`] : Top Soil Water Capacity. Minimum: 0.000000 Default: 30.000000
     - SWT_RESIST [`floating point number`] : Transpiration Resistance. Minimum: 0.010000 Default: 0.500000
     - RESET [`boolean`] : Reset. Default: 1
-    - DAY [`date`] : Start Day. Default: 2024-01-24
+    - DAY [`date`] : Start Day. Default: 2024-03-12
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -1363,8 +1363,8 @@ def Run_Daily_Solar_Radiation(LATITUDE=None, SOLARRAD=None, MONTH=None, DAY=None
     ----------
     - LATITUDE [`input grid`] : Latitude. [Degree]
     - SOLARRAD [`output grid`] : Solar Radiation. [J/cm²]
-    - MONTH [`choice`] : Month. Available Choices: [0] January [1] February [2] March [3] April [4] May [5] June [6] July [7] August [8] September [9] October [10] November [11] December Default: 0
-    - DAY [`integer number`] : Day of Month. Minimum: 1 Maximum: 31 Default: 23
+    - MONTH [`choice`] : Month. Available Choices: [0] January [1] February [2] March [3] April [4] May [5] June [6] July [7] August [8] September [9] October [10] November [11] December Default: 2
+    - DAY [`integer number`] : Day of Month. Minimum: 1 Maximum: 31 Default: 12
     - SUNSHINE [`floating point number`] : Sunshine Duration. Minimum: 0.000000 Maximum: 100.000000 Default: 50.000000 Daily sunshine duration as percentage of its potential maximum.
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n


=====================================
saga-gis/src/accessories/python/tools/grid_analysis.py
=====================================
@@ -650,9 +650,9 @@ def Run_Diversity_of_Categories(CATEGORIES=None, COUNT=None, DIVERSITY=None, CON
     - NORMALIZE [`choice`] : Normalize. Available Choices: [0] no [1] by number of cells [2] by area size Default: 0
     - KERNEL_TYPE [`choice`] : Kernel Type. Available Choices: [0] Square [1] Circle Default: 1 The kernel's shape.
     - KERNEL_RADIUS [`integer number`] : Radius. Minimum: 0 Default: 2 cells
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 0.700000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns


=====================================
saga-gis/src/accessories/python/tools/grid_gridding.py
=====================================
@@ -104,7 +104,7 @@ def Run_Inverse_Distance_Weighted(POINTS=None, TARGET_TEMPLATE=None, CV_SUMMARY=
     - SEARCH_POINTS_ALL [`choice`] : Number of Points. Available Choices: [0] maximum number of nearest points [1] all points within search distance Default: 1
     - SEARCH_POINTS_MIN [`integer number`] : Minimum. Minimum: 1 Default: 1 minimum number of points to use
     - SEARCH_POINTS_MAX [`integer number`] : Maximum. Minimum: 1 Default: 20 maximum number of nearest points
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 1
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
 
@@ -442,7 +442,7 @@ def Run_Angular_Distance_Weighted(POINTS=None, TARGET_TEMPLATE=None, CV_SUMMARY=
     - SEARCH_POINTS_ALL [`choice`] : Number of Points. Available Choices: [0] maximum number of nearest points [1] all points within search distance Default: 1
     - SEARCH_POINTS_MIN [`integer number`] : Minimum. Minimum: 1 Default: 1 minimum number of points to use
     - SEARCH_POINTS_MAX [`integer number`] : Maximum. Minimum: 1 Default: 20 maximum number of nearest points
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 1
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
 


=====================================
saga-gis/src/accessories/python/tools/grids_tools.py
=====================================
@@ -259,7 +259,7 @@ def Run_Inverse_Distance_Weighted_3D(POINTS=None, TARGET_TEMPLATE=None, GRIDS=No
     - SEARCH_POINTS_ALL [`choice`] : Number of Points. Available Choices: [0] maximum number of nearest points [1] all points within search distance Default: 1
     - SEARCH_POINTS_MIN [`integer number`] : Minimum. Minimum: 1 Default: 1 minimum number of points to use
     - SEARCH_POINTS_MAX [`integer number`] : Maximum. Minimum: 1 Default: 20 maximum number of nearest points
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 1
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
 


=====================================
saga-gis/src/accessories/python/tools/imagery_classification.py
=====================================
@@ -82,7 +82,7 @@ def Run_KMeans_Clustering_for_Grids(GRIDS=None, CLUSTER=None, STATISTICS=None, M
     - STATISTICS [`output table`] : Statistics
     - METHOD [`choice`] : Method. Available Choices: [0] Iterative Minimum Distance (Forgy 1965) [1] Hill-Climbing (Rubin 1967) [2] Combined Minimum Distance / Hillclimbing Default: 1
     - NCLUSTER [`integer number`] : Clusters. Minimum: 2 Default: 10 Number of clusters
-    - MAXITER [`integer number`] : Maximum Iterations. Minimum: 0 Default: 10 maximum number of iterations, ignored if set to zero (default)
+    - MAXITER [`integer number`] : Maximum Iterations. Minimum: 0 Default: 10 Maximum number of iterations, ignored if set to zero.
     - NORMALISE [`boolean`] : Normalise. Default: 0 Automatically normalise grids by standard deviation before clustering.
     - INITIALIZE [`choice`] : Start Partition. Available Choices: [0] random [1] periodical [2] keep values Default: 0
     - OLDVERSION [`boolean`] : Old Version. Default: 0 slower but memory saving


=====================================
saga-gis/src/accessories/python/tools/imagery_segmentation.py
=====================================
@@ -102,9 +102,9 @@ def Run_Seed_Generation(FEATURES=None, VARIANCE=None, SEED_GRID=None, SEED_POINT
     - METHOD [`choice`] : Method. Available Choices: [0] band width smoothing [1] band width search Default: 0
     - BAND_WIDTH [`floating point number`] : Bandwidth (Cells). Minimum: 1.000000 Default: 10.000000
     - NORMALIZE [`boolean`] : Normalize Features. Default: 0 Standardize the input features, i.e. rescale the input data (features) such that the mean equals 0 and the standard deviation equals 1. This is helpful when the input features have different scales, units or outliers.
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 5.000000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns


=====================================
saga-gis/src/accessories/python/tools/statistics_grid.py
=====================================
@@ -288,9 +288,9 @@ def Run_Directional_Statistics_for_Single_Grid(GRID=None, POINTS=None, MEAN=None
     - DIRECTION [`floating point number`] : Direction [Degree]. Default: 0.000000
     - TOLERANCE [`floating point number`] : Tolerance [Degree]. Minimum: 0.000000 Maximum: 45.000000 Default: 0.000000
     - MAXDISTANCE [`integer number`] : Maximum Distance [Cells]. Minimum: 0 Default: 0 Maximum distance parameter is ignored if set to zero (default).
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth specified as number of cells.
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 25.000000 Bandwidth specified as number of cells.
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns


=====================================
saga-gis/src/accessories/python/tools/statistics_regression.py
=====================================
@@ -186,7 +186,7 @@ def Run_GWR_for_Single_Predictor_Gridded_Model_Output(POINTS=None, TARGET_TEMPLA
     - TARGET_USER_ROWS [`integer number`] : Rows. Minimum: 1 Default: 101 Number of cells in North-South direction.
     - TARGET_USER_FITS [`choice`] : Fit. Available Choices: [0] nodes [1] cells Default: 0
     - TARGET_SYSTEM [`grid system`] : Grid System
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
     - SEARCH_RANGE [`choice`] : Search Range. Available Choices: [0] local [1] global Default: 1
@@ -249,7 +249,7 @@ def Run_GWR_for_Single_Predictor_Grid(POINTS=None, PREDICTOR=None, RESIDUALS=Non
     - SLOPE [`output grid`] : Slope
     - DEPENDENT [`table field`] : Dependent Variable
     - LOGISTIC [`boolean`] : Logistic Regression. Default: 0
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
     - SEARCH_RANGE [`choice`] : Search Range. Available Choices: [0] local [1] global Default: 1
@@ -312,7 +312,7 @@ def Run_GWR_for_Multiple_Predictors_Gridded_Model_Output(POINTS=None, TARGET_TEM
     - TARGET_USER_ROWS [`integer number`] : Rows. Minimum: 1 Default: 101 Number of cells in North-South direction.
     - TARGET_USER_FITS [`choice`] : Fit. Available Choices: [0] nodes [1] cells Default: 0
     - TARGET_SYSTEM [`grid system`] : Grid System
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
     - SEARCH_RANGE [`choice`] : Search Range. Available Choices: [0] local [1] global Default: 1
@@ -377,7 +377,7 @@ def Run_GWR_for_Multiple_Predictor_Grids(POINTS=None, PREDICTORS=None, RESIDUALS
     - MODEL_OUT [`boolean`] : Output of Regression Parameters. Default: 0
     - RESOLUTION [`choice`] : Model Resolution. Available Choices: [0] same as predictors [1] user defined Default: 1
     - RESOLUTION_VAL [`floating point number`] : Resolution. Minimum: 0.000000 Default: 1.000000 map units
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
     - SEARCH_RANGE [`choice`] : Search Range. Available Choices: [0] local [1] global Default: 1
@@ -428,7 +428,7 @@ def Run_GWR_for_Multiple_Predictors_Shapes(POINTS=None, REGRESSION=None, DEPENDE
     - DEPENDENT [`table field`] : Dependent Variable
     - PREDICTORS [`table fields`] : Predictors
     - LOGISTIC [`boolean`] : Logistic Regression. Default: 0
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
     - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
     - SEARCH_RANGE [`choice`] : Search Range. Available Choices: [0] local [1] global Default: 1
@@ -712,9 +712,9 @@ def Run_GWR_for_Grid_Downscaling(PREDICTORS=None, DEPENDENT=None, REGRESSION=Non
     - MODEL_OUT [`boolean`] : Output of Model Parameters. Default: 0
     - SEARCH_RANGE [`choice`] : Search Range. Available Choices: [0] local [1] global Default: 0
     - SEARCH_RADIUS [`integer number`] : Search Distance [Cells]. Minimum: 1 Default: 10
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 7.000000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns


=====================================
saga-gis/src/accessories/python/tools/ta_lighting.py
=====================================
@@ -28,7 +28,7 @@ def Run_Analytical_Hillshading(ELEVATION=None, SHADE=None, METHOD=None, POSITION
     - POSITION [`choice`] : Sun's Position. Available Choices: [0] azimuth and height [1] date and time Default: 0
     - AZIMUTH [`floating point number`] : Azimuth. Minimum: 0.000000 Maximum: 360.000000 Default: 315.000000 Direction of the light source, measured in degree clockwise from the North direction.
     - DECLINATION [`floating point number`] : Height. Minimum: 0.000000 Maximum: 90.000000 Default: 45.000000 Height of the light source, measured in degree above the horizon.
-    - DATE [`date`] : Day. Default: 2024-01-24
+    - DATE [`date`] : Day. Default: 2024-03-12
     - TIME [`floating point number`] : Hour. Minimum: 0.000000 Maximum: 24.000000 Default: 12.000000
     - EXAGGERATION [`floating point number`] : Exaggeration. Default: 1.000000 The terrain exaggeration factor allows one to increase the shading contrasts in flat areas.
     - UNIT [`choice`] : Unit. Available Choices: [0] radians [1] degree Default: 0
@@ -89,8 +89,8 @@ def Run_Potential_Incoming_Solar_Radiation(GRD_DEM=None, GRD_SVF=None, GRD_VAPOU
     - LOCATION [`choice`] : Location. Available Choices: [0] constant latitude [1] calculate from grid system Default: 0
     - LATITUDE [`degree`] : Latitude. Minimum: -90.000000 Maximum: 90.000000 Default: 53.000000
     - PERIOD [`choice`] : Time Period. Available Choices: [0] moment [1] day [2] range of days Default: 1
-    - DAY [`date`] : Day. Default: 2024-01-24
-    - DAY_STOP [`date`] : Last Day. Default: 2024-01-24
+    - DAY [`date`] : Day. Default: 2024-03-12
+    - DAY_STOP [`date`] : Last Day. Default: 2024-03-12
     - DAYS_STEP [`integer number`] : Resolution [d]. Minimum: 1 Default: 5 Time step size for a range of days calculation given in days.
     - MOMENT [`floating point number`] : Moment [h]. Minimum: 0.000000 Maximum: 24.000000 Default: 12.000000
     - HOUR_RANGE [`value range`] : Time Span [h]. Time span used for the calculation of daily radiation sums.


=====================================
saga-gis/src/accessories/python/tools/ta_morphometry.py
=====================================
@@ -580,7 +580,7 @@ def Run_Terrain_Ruggedness_Index_TRI(DEM=None, TRI=None, MODE=None, RADIUS=None,
     - RADIUS [`integer number`] : Search Radius. Minimum: 1 Default: 1 radius in cells
     - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 75.000000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -613,7 +613,7 @@ def Run_Vector_Ruggedness_Measure_VRM(DEM=None, VRM=None, MODE=None, RADIUS=None
     - RADIUS [`integer number`] : Search Radius. Minimum: 1 Default: 1 radius in cells
     - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 75.000000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -646,7 +646,7 @@ def Run_Topographic_Position_Index_TPI(DEM=None, TPI=None, STANDARD=None, RADIUS
     - RADIUS [`value range`] : Scale. kernel radius in map units; defines an annulus if inner radius is greater than zero
     - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 75.000000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -679,7 +679,7 @@ def Run_TPI_Based_Landform_Classification(DEM=None, LANDFORMS=None, RADIUS_A=Non
     - RADIUS_B [`value range`] : Large Scale. kernel radius in map units; defines an annulus if inner radius is greater than zero
     - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 75.000000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -711,9 +711,9 @@ def Run_Terrain_Surface_Texture(DEM=None, TEXTURE=None, EPSILON=None, SCALE=None
     - EPSILON [`floating point number`] : Flat Area Threshold. Minimum: 0.000000 Default: 1.000000 maximum difference between original and median filtered elevation (3x3 moving window) that still is recognized flat
     - SCALE [`integer number`] : Scale (Cells). Minimum: 1 Default: 10
     - METHOD [`choice`] : Method. Available Choices: [0] counting cells [1] resampling Default: 1
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 0.700000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns
@@ -748,9 +748,9 @@ def Run_Terrain_Surface_Convexity(DEM=None, CONVEXITY=None, KERNEL=None, TYPE=No
     - EPSILON [`floating point number`] : Flat Area Threshold. Minimum: 0.000000 Default: 0.000000
     - SCALE [`integer number`] : Scale (Cells). Minimum: 1 Default: 10
     - METHOD [`choice`] : Method. Available Choices: [0] counting cells [1] resampling Default: 1
-    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 0
+    - DW_WEIGHTING [`choice`] : Weighting Function. Available Choices: [0] no distance weighting [1] inverse distance to a power [2] exponential [3] gaussian Default: 3
     - DW_IDW_POWER [`floating point number`] : Power. Minimum: 0.000000 Default: 2.000000
-    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 1.000000 Bandwidth for exponential and Gaussian weighting
+    - DW_BANDWIDTH [`floating point number`] : Bandwidth. Minimum: 0.000000 Default: 0.700000 Bandwidth for exponential and Gaussian weighting
 
     - Verbose [`integer number`] : Verbosity level, 0=silent, 1=tool name and success notification, 2=complete tool output.\n
     Returns


=====================================
saga-gis/src/saga_core/saga_api/geo_classes.cpp
=====================================
@@ -1365,10 +1365,12 @@ bool CSG_Distance_Weighting::Create_Parameters(CSG_Parameters &Parameters, const
 {
 	if( Add_Parameters(Parameters, Parent, bIDW_Offset) )
 	{
-		if( Parameters("DW_WEIGHTING" ) ) { Parameters("DW_WEIGHTING" )->Set_Value((int)m_Weighting  ); }
-		if( Parameters("DW_IDW_POWER" ) ) { Parameters("DW_IDW_POWER" )->Set_Value(     m_IDW_Power  ); }
-		if( Parameters("DW_IDW_OFFSET") ) { Parameters("DW_IDW_OFFSET")->Set_Value(     m_IDW_bOffset); }
-		if( Parameters("DW_BANDWIDTH" ) ) { Parameters("DW_BANDWIDTH" )->Set_Value(     m_Bandwidth  ); }
+		#define INIT_VALUE(id, val) if( Parameters(id) ) { Parameters(id)->Set_Value(val); Parameters(id)->Set_Default(val); }
+
+		INIT_VALUE("DW_WEIGHTING" ,(int)m_Weighting  );
+		INIT_VALUE("DW_IDW_POWER" ,     m_IDW_Power  );
+		INIT_VALUE("DW_IDW_OFFSET",     m_IDW_bOffset);
+		INIT_VALUE("DW_BANDWIDTH" ,     m_Bandwidth  );
 
 		return( true );
 	}


=====================================
saga-gis/src/saga_core/saga_api/mat_tools.h
=====================================
@@ -117,8 +117,8 @@
 #define N_MEGABYTE_BYTES			0x100000
 
 //---------------------------------------------------------
-#define M_ALMOST_ZERO				0.001l
-#define M_TINY						(1.0e-20)
+#define M_ALMOST_ZERO				(1.e-03)
+#define M_TINY						(1.e-20)
 
 //---------------------------------------------------------
 #define M_SQR(x)					((x) * (x))


=====================================
saga-gis/src/saga_core/saga_api/parameter.cpp
=====================================
@@ -1866,10 +1866,10 @@ CSG_Grids * CSG_Parameters_Grid_Target::Get_Grids(const CSG_String &Identifier,
 
 	CSG_Grids *pGrids = NULL;
 
-	if( (*m_pParameters)(m_Prefix + "DEFINITION")->asInt() == 0
-	&&  (*m_pParameters)(Identifier + "_CREATE") )
+	if( (*m_pParameters)(m_Prefix + "DEFINITION")->asInt() == 0 && m_pParameters->Get_Tool()->has_GUI() )
 	{
-		if( (*m_pParameters)(Identifier + "_CREATE")->asBool() )
+		if( (*m_pParameters)(Identifier + "_CREATE") == NULL
+		||  (*m_pParameters)(Identifier + "_CREATE")->asBool() )
 		{
 			pGrids = SG_Create_Grids(System, 0, 0., Type);
 		}
@@ -1882,6 +1882,10 @@ CSG_Grids * CSG_Parameters_Grid_Target::Get_Grids(const CSG_String &Identifier,
 		{
 			pGrids = SG_Create_Grids(System, 0, 0., Type);
 		}
+		else if( pGrids && (pGrids->Get_Type() != Type || !pGrids->Get_System().is_Equal(System)) )
+		{
+			pGrids->Create(System, 0, 0., Type);
+		}
 	}
 
 	if( pGrids && pGrids != pParameter->asGrids() )
@@ -1889,6 +1893,7 @@ CSG_Grids * CSG_Parameters_Grid_Target::Get_Grids(const CSG_String &Identifier,
 		pParameter->Set_Value(pGrids);
 	}
 
+	//-----------------------------------------------------
 	if( pGrids
 	&&  (*m_pParameters)(m_Prefix + "USER_ZSIZE")
 	&&  (*m_pParameters)(m_Prefix + "USER_ZMIN" )


=====================================
saga-gis/src/saga_core/saga_api/parameters.cpp
=====================================
@@ -202,6 +202,14 @@ void CSG_Parameters::Destroy(void)
 void CSG_Parameters::Set_Tool(CSG_Tool *pTool)
 {
 	m_pTool = pTool;
+
+	for(int i=0; i<Get_Count(); i++)
+	{
+		if( m_Parameters[i]->Get_Type() == PARAMETER_TYPE_Parameters )
+		{
+			m_Parameters[i]->asParameters()->Set_Tool(pTool);
+		}
+	}
 }
 
 //---------------------------------------------------------
@@ -1554,11 +1562,16 @@ bool CSG_Parameters::Assign_Parameters(CSG_Parameters *pSource)
 	for(int i=0; i<pSource->m_nParameters; i++)
 	{
 		_Add(pSource->m_Parameters[i]);
+
+		if( m_Parameters[i]->asParameters() )
+		{
+			m_Parameters[i]->asParameters()->Set_Tool(m_pTool);
+		}
 	}
 
 	if( pSource->m_pGrid_System )
 	{
-		m_pGrid_System	= Get_Parameter(pSource->m_pGrid_System->Get_Identifier());
+		m_pGrid_System = Get_Parameter(pSource->m_pGrid_System->Get_Identifier());
 	}
 
 	return( m_nParameters == pSource->m_nParameters );


=====================================
saga-gis/src/saga_core/saga_api/saga_api.h
=====================================
@@ -86,8 +86,8 @@
 //---------------------------------------------------------
 #define SAGA_MAJOR_VERSION		9
 #define SAGA_MINOR_VERSION		3
-#define SAGA_RELEASE_NUMBER		1
-#define SAGA_VERSION			SG_T("9.3.1")
+#define SAGA_RELEASE_NUMBER		2
+#define SAGA_VERSION			SG_T("9.3.2")
 
 
 ///////////////////////////////////////////////////////////


=====================================
saga-gis/src/saga_core/saga_cmd/man/saga_cmd.1
=====================================
@@ -133,7 +133,7 @@
 .\" ========================================================================
 .\"
 .IX Title "SAGA_CMD 1"
-.TH SAGA_CMD 1 "2021-07-07" "9.3.1" " "
+.TH SAGA_CMD 1 "2021-07-07" "9.3.2" " "
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l


=====================================
saga-gis/src/saga_core/saga_gui/man/saga_gui.1
=====================================
@@ -124,7 +124,7 @@
 .\" ========================================================================
 .\"
 .IX Title "SAGA_GUI 1"
-.TH SAGA_GUI 1 "2021-07-07" "9.3.1" " "
+.TH SAGA_GUI 1 "2021-07-07" "9.3.2" " "
 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
 .\" way too many mistakes in technical documents.
 .if n .ad l


=====================================
saga-gis/src/tools/imagery/imagery_classification/classify_cluster_analysis.cpp
=====================================
@@ -117,7 +117,7 @@ CGrid_Cluster_Analysis::CGrid_Cluster_Analysis(void)
 
 	Parameters.Add_Int("",
 		"MAXITER"		, _TL("Maximum Iterations"),
-		_TL("maximum number of iterations, ignored if set to zero (default)"),
+		_TL("Maximum number of iterations, ignored if set to zero."),
 		10, 0, true
 	);
 


=====================================
saga-gis/src/tools/projection/pj_proj4/crs_transform_coords.cpp
=====================================
@@ -50,9 +50,9 @@
 
 
 ///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
+//                                                       //
+//                                                       //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -71,25 +71,25 @@ CCRS_Transform_Coords_Grid::CCRS_Transform_Coords_Grid(void)
 
 	//-----------------------------------------------------
 	Parameters.Add_Grid("",
-		"SOURCE_X"	, _TL("X Coordinate Source"),
+		"SOURCE_X", _TL("X Coordinate Source"),
 		_TL("Grid that provides the source X coordinates."),
 		PARAMETER_INPUT
 	);
 
 	Parameters.Add_Grid("",
-		"SOURCE_Y"	, _TL("Y Coordinate Source"),
+		"SOURCE_Y", _TL("Y Coordinate Source"),
 		_TL("Grid that provides the source Y coordinates."),
 		PARAMETER_INPUT
 	);
 
 	Parameters.Add_Grid("",
-		"TARGET_X"	, _TL("Projected X Coordinates"),
+		"TARGET_X", _TL("Projected X Coordinates"),
 		_TL(""),
 		PARAMETER_OUTPUT
 	);
 
 	Parameters.Add_Grid("",
-		"TARGET_Y"	, _TL("Projected Y Coordinates"),
+		"TARGET_Y", _TL("Projected Y Coordinates"),
 		_TL(""),
 		PARAMETER_OUTPUT
 	);
@@ -97,20 +97,18 @@ CCRS_Transform_Coords_Grid::CCRS_Transform_Coords_Grid(void)
 	//-----------------------------------------------------
 	CCRS_Picker	Picker;
 
-	Parameters.Add_Parameters("",
-		"SOURCE_CRS", _TL("Source Coordinate System"),
-		_TL("")
-	)->asParameters()->Assign_Parameters(Picker.Get_Parameters());
+	Parameters.Add_Parameters("", "SOURCE_CRS", _TL("Source Coordinate System"), _TL(""))
+		->asParameters()->Assign_Parameters(Picker.Get_Parameters()
+	);
 
-	Parameters.Add_Parameters("",
-		"TARGET_CRS", _TL("Target Coordinate System"),
-		_TL("")
-	)->asParameters()->Assign_Parameters(Picker.Get_Parameters());
+	Parameters.Add_Parameters("", "TARGET_CRS", _TL("Target Coordinate System"), _TL(""))
+		->asParameters()->Assign_Parameters(Picker.Get_Parameters()
+	);
 }
 
 
 ///////////////////////////////////////////////////////////
-//														 //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -131,15 +129,15 @@ int CCRS_Transform_Coords_Grid::On_Parameters_Enable(CSG_Parameters *pParameters
 
 
 ///////////////////////////////////////////////////////////
-//														 //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
 bool CCRS_Transform_Coords_Grid::On_Execute(void)
 {
-	CSG_CRSProjector	Projector;
+	CSG_CRSProjector Projector;
 
-	CSG_Projection	Source(Parameters("SOURCE_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
+	CSG_Projection Source(Parameters("SOURCE_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
 
 	if( !Projector.Set_Source(Source) )
 	{
@@ -148,7 +146,7 @@ bool CCRS_Transform_Coords_Grid::On_Execute(void)
 		return( false );
 	}
 
-	CSG_Projection	Target(Parameters("TARGET_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
+	CSG_Projection Target(Parameters("TARGET_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
 
 	if( !Projector.Set_Source(Source) || !Projector.Set_Target(Target) )
 	{
@@ -158,11 +156,11 @@ bool CCRS_Transform_Coords_Grid::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
-	CSG_Grid	*pSource_X	= Parameters("SOURCE_X")->asGrid();
-	CSG_Grid	*pSource_Y	= Parameters("SOURCE_Y")->asGrid();
+	CSG_Grid *pSource_X = Parameters("SOURCE_X")->asGrid();
+	CSG_Grid *pSource_Y = Parameters("SOURCE_Y")->asGrid();
 
-	CSG_Grid	*pTarget_X	= Parameters("TARGET_X")->asGrid();
-	CSG_Grid	*pTarget_Y	= Parameters("TARGET_Y")->asGrid();
+	CSG_Grid *pTarget_X = Parameters("TARGET_X")->asGrid();
+	CSG_Grid *pTarget_Y = Parameters("TARGET_Y")->asGrid();
 
 	//-----------------------------------------------------
 	for(int y=0; y<Get_NY() && Set_Progress_Rows(y); y++)
@@ -172,7 +170,7 @@ bool CCRS_Transform_Coords_Grid::On_Execute(void)
 		{
 			if( !pSource_X->is_NoData(x, y) && !pSource_Y->is_NoData(x, y) )
 			{
-				CSG_Point	Point(pSource_X->asDouble(x, y), pSource_Y->asDouble(x, y));
+				CSG_Point Point(pSource_X->asDouble(x, y), pSource_Y->asDouble(x, y));
 
 				if( Projector.Get_Projection(Point) )
 				{
@@ -194,9 +192,9 @@ bool CCRS_Transform_Coords_Grid::On_Execute(void)
 
 
 ///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
+//                                                       //
+//                                                       //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -215,29 +213,29 @@ CCRS_Transform_Coords_Table::CCRS_Transform_Coords_Table(void)
 
 	//-----------------------------------------------------
 	Parameters.Add_Table("",
-		"TABLE"		, _TL("Table"),
+		"TABLE"   , _TL("Table"),
 		_TL(""),
 		PARAMETER_INPUT
 	);
 
 	Parameters.Add_Table_Field("TABLE",
-		"SOURCE_X"	, _TL("X Coordinate Source"),
+		"SOURCE_X", _TL("X Coordinate Source"),
 		_TL("Table field that provides the source X coordinates.")
 	);
 
 	Parameters.Add_Table_Field("TABLE",
-		"SOURCE_Y"	, _TL("Y Coordinate Source"),
+		"SOURCE_Y", _TL("Y Coordinate Source"),
 		_TL("Table field that provides the source Y coordinates.")
 	);
 
 	Parameters.Add_Table_Field("TABLE",
-		"TARGET_X"	, _TL("Projected X Coordinates"),
+		"TARGET_X", _TL("Projected X Coordinates"),
 		_TL(""),
 		true
 	);
 
 	Parameters.Add_Table_Field("TABLE",
-		"TARGET_Y"	, _TL("Projected Y Coordinates"),
+		"TARGET_Y", _TL("Projected Y Coordinates"),
 		_TL(""),
 		true
 	);
@@ -245,20 +243,18 @@ CCRS_Transform_Coords_Table::CCRS_Transform_Coords_Table(void)
 	//-----------------------------------------------------
 	CCRS_Picker	Picker;
 
-	Parameters.Add_Parameters("",
-		"SOURCE_CRS", _TL("Source Coordinate System"),
-		_TL("")
-	)->asParameters()->Assign_Parameters(Picker.Get_Parameters());
+	Parameters.Add_Parameters("", "SOURCE_CRS", _TL("Source Coordinate System"), _TL(""))
+		->asParameters()->Assign_Parameters(Picker.Get_Parameters()
+	);
 
-	Parameters.Add_Parameters("",
-		"TARGET_CRS", _TL("Target Coordinate System"),
-		_TL("")
-	)->asParameters()->Assign_Parameters(Picker.Get_Parameters());
+	Parameters.Add_Parameters("", "TARGET_CRS", _TL("Target Coordinate System"), _TL(""))
+		->asParameters()->Assign_Parameters(Picker.Get_Parameters()
+	);
 }
 
 
 ///////////////////////////////////////////////////////////
-//														 //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -279,15 +275,15 @@ int CCRS_Transform_Coords_Table::On_Parameters_Enable(CSG_Parameters *pParameter
 
 
 ///////////////////////////////////////////////////////////
-//														 //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
 bool CCRS_Transform_Coords_Table::On_Execute(void)
 {
-	CSG_CRSProjector	Projector;
+	CSG_CRSProjector Projector;
 
-	CSG_Projection	Source(Parameters("SOURCE_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
+	CSG_Projection Source(Parameters("SOURCE_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
 
 	if( !Projector.Set_Source(Source) )
 	{
@@ -296,7 +292,7 @@ bool CCRS_Transform_Coords_Table::On_Execute(void)
 		return( false );
 	}
 
-	CSG_Projection	Target(Parameters("TARGET_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
+	CSG_Projection Target(Parameters("TARGET_CRS")->asParameters()->Get_Parameter("CRS_PROJ4")->asString(), SG_PROJ_FMT_Proj4);
 
 	if( !Projector.Set_Source(Source) || !Projector.Set_Target(Target) )
 	{
@@ -306,24 +302,24 @@ bool CCRS_Transform_Coords_Table::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
-	CSG_Table	*pTable	= Parameters("TABLE")->asTable();
+	CSG_Table *pTable = Parameters("TABLE")->asTable();
 
-	int	Source_X	= Parameters("SOURCE_X")->asInt();
-	int	Source_Y	= Parameters("SOURCE_Y")->asInt();
+	int Source_X = Parameters("SOURCE_X")->asInt();
+	int Source_Y = Parameters("SOURCE_Y")->asInt();
 
-	int	Target_X	= Parameters("TARGET_X")->asInt();
-	int	Target_Y	= Parameters("TARGET_Y")->asInt();
+	int Target_X = Parameters("TARGET_X")->asInt();
+	int Target_Y = Parameters("TARGET_Y")->asInt();
 
 	if( Target_X < 0 )
 	{
-		Target_X	= pTable->Get_Field_Count();
+		Target_X = pTable->Get_Field_Count();
 
 		pTable->Add_Field("X_PROJECTED", SG_DATATYPE_Double);
 	}
 
 	if( Target_Y < 0 )
 	{
-		Target_Y	= pTable->Get_Field_Count();
+		Target_Y = pTable->Get_Field_Count();
 
 		pTable->Add_Field("Y_PROJECTED", SG_DATATYPE_Double);
 	}
@@ -352,14 +348,16 @@ bool CCRS_Transform_Coords_Table::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
+	DataObject_Update(pTable);
+
 	return( true );
 }
 
 
 ///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
+//                                                       //
+//                                                       //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------


=====================================
saga-gis/src/tools/projection/pj_proj4/crs_transform_coords.h
=====================================
@@ -51,9 +51,9 @@
 
 
 ///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
+//                                                       //
+//                                                       //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -61,9 +61,9 @@
 
 
 ///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
+//                                                       //
+//                                                       //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -86,7 +86,7 @@ protected:
 
 
 ///////////////////////////////////////////////////////////
-//														 //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
@@ -109,9 +109,9 @@ protected:
 
 
 ///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
+//                                                       //
+//                                                       //
+//                                                       //
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------


=====================================
saga-gis/src/tools/projection/pj_proj4/crs_transform_grid.cpp
=====================================
@@ -165,6 +165,7 @@ int CCRS_Transform_Grid::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_P
 	||  pParameter->Cmp_Identifier("CRS_PROJ4"      )
 	||  pParameter->Cmp_Identifier("CRS_DIALOG"     )
 	||  pParameter->Cmp_Identifier("CRS_PICKER"     )
+	||  pParameter->Cmp_Identifier("CRS_FILE"       )
 	||  pParameter->Cmp_Identifier("CRS_EPSG"       )
 	||  pParameter->Cmp_Identifier("CRS_EPSG_AUTH"  )
 	||  pParameter->Cmp_Identifier("CRS_EPSG_GEOGCS")


=====================================
saga-gis/src/tools/shapes/shapes_grid/Grid_To_Contour.cpp
=====================================
@@ -761,42 +761,15 @@ bool CGrid_To_Contour::Get_Edge_Segments(CSG_Shapes &Edges, CSG_Shapes *pContour
 		}
 		else if( Edge.asLong(0) == Edge.asLong(1) ) // needs to determine 'going lower/higher' state in relation to contour elevation
 		{
-			#define Edge_Point(i) { p[i] = Edge.Get_Point(i);\
-				p[i].x = (p[i].x - m_pGrid->Get_XMin()) / m_pGrid->Get_Cellsize();\
-				p[i].y = (p[i].y - m_pGrid->Get_YMin()) / m_pGrid->Get_Cellsize();\
-			}
-
-			CSG_Point p[2]; Edge_Point(0); Edge_Point(1);
-
-			if( p[0].x > p[1].x || p[0].y > p[1].y )
-			{
-				CSG_Point _p = p[0]; p[0] = p[1]; p[1] = _p;
-			}
-
-			int x = (int)p[0].x, y = (int)p[0].y;
-
-			double z = pContours->Get_Shape(Edge.asLong(0))->asDouble(1), dz = 0.;
-
-			if( p[0].x < p[1].x )
-			{
-				if( p[0].x == x )
-				{
-					x += m_pGrid->is_InGrid(x + 1, y) && m_pGrid->asDouble(x + 1, y) != z ? 1 : -1;
-				}
+			CSG_Point p[2] = { Edge.Get_Point(0), Edge.Get_Point(1) };
 
-				dz = p[0].x < x ? z - m_pGrid->asDouble(x, y) : m_pGrid->asDouble(x, y) - z;
-			}
-			else // if( p[0].y < p[1].y )
-			{
-				if( p[0].y == y )
-				{
-					y += m_pGrid->is_InGrid(x, y + 1) && m_pGrid->asDouble(x, y + 1) != z ? 1 : -1;
-				}
+			p[1].x = p[0].x + 0.5 * (p[1].x - p[0].x);
+			p[1].y = p[0].y + 0.5 * (p[1].y - p[0].y);
 
-				dz = p[0].y < y ? z - m_pGrid->asDouble(x, y) : m_pGrid->asDouble(x, y) - z;
-			}
+			double dz = m_pGrid->Get_Value(p[1], GRID_RESAMPLING_Bilinear)
+			          - m_pGrid->Get_Value(p[0], GRID_RESAMPLING_Bilinear);
 
-			if( dz > 0. )
+			if( dz < 0. )
 			{
 				Edge.Add_Value(0, -1);
 			}
@@ -1017,7 +990,7 @@ bool CGrid_To_Contour::Get_Polygons(CSG_Shape_Polygon &Polygon, CSG_Shapes &Edge
 
 		while( Add_Polygon_Segment(Segments, pPart) );
 
-		if( Polygon.Get_Area(iPart) == 0. )
+		if( !Polygon.Get_Area(iPart) )
 		{
 			Polygon.Del_Part(iPart);
 		}


=====================================
saga-gis/src/tools/statistics/statistics_regression/point_multi_grid_regression.cpp
=====================================
@@ -60,7 +60,6 @@
 //---------------------------------------------------------
 CPoint_Multi_Grid_Regression::CPoint_Multi_Grid_Regression(void)
 {
-	//-----------------------------------------------------
 	Set_Name		(_TL("Multiple Regression Analysis (Points and Predictor Grids)"));
 
 	Set_Author		("O.Conrad (c) 2004");
@@ -80,60 +79,60 @@ CPoint_Multi_Grid_Regression::CPoint_Multi_Grid_Regression(void)
 
 	//-----------------------------------------------------
 	Parameters.Add_Grid_List("",
-		"PREDICTORS"	, _TL("Predictors"),
+		"PREDICTORS"    , _TL("Predictors"),
 		_TL(""),
 		PARAMETER_INPUT, true
 	);
 
 	Parameters.Add_Shapes("",
-		"POINTS"		, _TL("Points"),
+		"POINTS"        , _TL("Points"),
 		_TL(""),
 		PARAMETER_INPUT, SHAPE_TYPE_Point
 	);
 
 	Parameters.Add_Table_Field("POINTS",
-		"ATTRIBUTE"		, _TL("Dependent Variable"),
+		"ATTRIBUTE"     , _TL("Dependent Variable"),
 		_TL("")
 	);
 
 	Parameters.Add_Table("",
-		"INFO_COEFF"	, _TL("Details: Coefficients"),
+		"INFO_COEFF"    , _TL("Details: Coefficients"),
 		_TL(""),
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
 	Parameters.Add_Table("",
-		"INFO_MODEL"	, _TL("Details: Model"),
+		"INFO_MODEL"    , _TL("Details: Model"),
 		_TL(""),
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
 	Parameters.Add_Table("",
-		"INFO_STEPS"	, _TL("Details: Steps"),
+		"INFO_STEPS"    , _TL("Details: Steps"),
 		_TL(""),
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
 	Parameters.Add_Shapes("",
-		"RESIDUALS"		, _TL("Residuals"),
+		"RESIDUALS"     , _TL("Residuals"),
 		_TL(""),
 		PARAMETER_OUTPUT_OPTIONAL, SHAPE_TYPE_Point
 	);
 
 	Parameters.Add_Grid("",
-		"REGRESSION"	, _TL("Regression"),
+		"REGRESSION"    , _TL("Regression"),
 		_TL("regression model applied to predictor grids"),
 		PARAMETER_OUTPUT, SHAPE_TYPE_Point
 	);
 
 	Parameters.Add_Grid("",
-		"REGRESCORR"	, _TL("Regression with Residual Correction"),
+		"REGRESCORR"    , _TL("Regression with Residual Correction"),
 		_TL("regression model applied to predictor grids with interpolated residuals added"),
 		PARAMETER_OUTPUT_OPTIONAL
 	);
 
 	Parameters.Add_Choice("",
-		"RESAMPLING"	, _TL("Resampling"),
+		"RESAMPLING"    , _TL("Resampling"),
 		_TL(""),
 		CSG_String::Format("%s|%s|%s|%s",
 			_TL("Nearest Neighbour"),
@@ -144,25 +143,25 @@ CPoint_Multi_Grid_Regression::CPoint_Multi_Grid_Regression(void)
 	);
 
 	Parameters.Add_Bool("",
-		"COORD_X"		, _TL("Include X Coordinate"),
+		"COORD_X"       , _TL("Include X Coordinate"),
 		_TL(""),
 		false
 	);
 
 	Parameters.Add_Bool("",
-		"COORD_Y"		, _TL("Include Y Coordinate"),
+		"COORD_Y"       , _TL("Include Y Coordinate"),
 		_TL(""),
 		false
 	);
 
 	Parameters.Add_Bool("",
-		"INTERCEPT"		, _TL("Intercept"),
+		"INTERCEPT"     , _TL("Intercept"),
 		_TL(""),
 		true
 	);
 
 	Parameters.Add_Choice("",
-		"METHOD"		, _TL("Method"),
+		"METHOD"        , _TL("Method"),
 		_TL(""),
 		CSG_String::Format("%s|%s|%s|%s",
 			_TL("include all"),
@@ -173,13 +172,13 @@ CPoint_Multi_Grid_Regression::CPoint_Multi_Grid_Regression(void)
 	);
 
 	Parameters.Add_Double("",
-		"P_VALUE"		, _TL("Significance Level"),
+		"P_VALUE"       , _TL("Significance Level"),
 		_TL("Significance level (aka p-value) as threshold for automated predictor selection, given as percentage"),
 		5., 0., true, 100., true
 	);
 
 	Parameters.Add_Choice("",
-		"CROSSVAL"		, _TL("Cross Validation"),
+		"CROSSVAL"      , _TL("Cross Validation"),
 		_TL(""),
 		CSG_String::Format("%s|%s|%s|%s",
 			_TL("none"),
@@ -190,13 +189,13 @@ CPoint_Multi_Grid_Regression::CPoint_Multi_Grid_Regression(void)
 	);
 
 	Parameters.Add_Int("",
-		"CROSSVAL_K"	, _TL("Cross Validation Subsamples"),
+		"CROSSVAL_K"    , _TL("Cross Validation Subsamples"),
 		_TL("number of subsamples for k-fold cross validation"),
 		10, 2, true
 	);
 
 	Parameters.Add_Choice("",
-		"RESIDUAL_COR"	, _TL("Residual Interpolation"),
+		"RESIDUAL_COR"  , _TL("Residual Interpolation"),
 		_TL(""),
 		CSG_String::Format("%s|%s",
 			_TL("Multilevel B-Spline Interpolation"),
@@ -239,24 +238,13 @@ int CPoint_Multi_Grid_Regression::On_Parameters_Enable(CSG_Parameters *pParamete
 //---------------------------------------------------------
 bool CPoint_Multi_Grid_Regression::On_Execute(void)
 {
-	bool					bResult;
-	int						iAttribute;
-	double					P;
-	CSG_Strings				Names;
-	CSG_Matrix				Samples;
-	CSG_Shapes				*pPoints;
-	CSG_Grid				*pRegression;
-	CSG_Parameter_Grid_List	*pGrids;
+	CSG_Shapes             *pPoints = Parameters("POINTS"    )->asShapes  ();
+	int                   Attribute = Parameters("ATTRIBUTE" )->asInt     ();
+	CSG_Parameter_Grid_List *pGrids = Parameters("PREDICTORS")->asGridList();
 
-	//-----------------------------------------------------
-	pGrids		= Parameters("PREDICTORS")->asGridList();
-	pRegression	= Parameters("REGRESSION")->asGrid();
-	pPoints		= Parameters("POINTS"    )->asShapes();
-	iAttribute	= Parameters("ATTRIBUTE" )->asInt();
-	P			= Parameters("P_VALUE"   )->asDouble() / 100.;
+	CSG_Matrix Samples; CSG_Strings Names;
 
-	//-----------------------------------------------------
-	if( !Get_Samples(pGrids, pPoints, iAttribute, Samples, Names) )
+	if( !Get_Samples(pGrids, pPoints, Attribute, Samples, Names) )
 	{
 		return( false );
 	}
@@ -264,12 +252,14 @@ bool CPoint_Multi_Grid_Regression::On_Execute(void)
 	//-----------------------------------------------------
 	m_Regression.Set_With_Intercept(Parameters("INTERCEPT")->asBool());
 
+	bool bResult; double p = Parameters("P_VALUE")->asDouble() / 100.;
+
 	switch( Parameters("METHOD")->asInt() )
 	{
-	default: bResult = m_Regression.Get_Model         (Samples      , &Names);	break;
-	case  1: bResult = m_Regression.Get_Model_Forward (Samples, P   , &Names);	break;
-	case  2: bResult = m_Regression.Get_Model_Backward(Samples,    P, &Names);	break;
-	case  3: bResult = m_Regression.Get_Model_Stepwise(Samples, P, P, &Names);	break;
+	default: bResult = m_Regression.Get_Model         (Samples      , &Names); break;
+	case  1: bResult = m_Regression.Get_Model_Forward (Samples, p   , &Names); break;
+	case  2: bResult = m_Regression.Get_Model_Backward(Samples,    p, &Names); break;
+	case  3: bResult = m_Regression.Get_Model_Stepwise(Samples, p, p, &Names); break;
 	}
 
 	if( bResult == false )
@@ -283,14 +273,14 @@ bool CPoint_Multi_Grid_Regression::On_Execute(void)
 	Message_Add(m_Regression.Get_Info(), false);
 
 	//-----------------------------------------------------
-	int	CrossVal;
+	int	CrossVal = Parameters("CROSSVAL")->asInt();
 
-	switch( Parameters("CROSSVAL")->asInt() )
+	switch( CrossVal )
 	{
-	default: CrossVal = 0;                                 break;	// none
-	case  1: CrossVal = 1;                                 break;	// leave one out (LOOVC)
-	case  2: CrossVal = 2;                                 break;	// 2-fold
-	case  3: CrossVal = Parameters("CROSSVAL_K")->asInt(); break;	// k-fold
+	default: CrossVal = 0;                                 break; // none
+	case  1: CrossVal = 1;                                 break; // leave one out (LOOVC)
+	case  2: CrossVal = 2;                                 break; // 2-fold
+	case  3: CrossVal = Parameters("CROSSVAL_K")->asInt(); break; // k-fold
 	}
 
 	if( CrossVal > 0 && m_Regression.Get_CrossValidation(CrossVal) )
@@ -304,6 +294,8 @@ bool CPoint_Multi_Grid_Regression::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
+	CSG_Grid *pRegression = Parameters("REGRESSION")->asGrid();
+
 	Set_Regression(pGrids, pRegression, CSG_String::Format("%s.%s [%s]", pPoints->Get_Name(), Parameters("ATTRIBUTE")->asString(), _TL("Regression")));
 
 	//-----------------------------------------------------
@@ -341,16 +333,21 @@ bool CPoint_Multi_Grid_Regression::On_Execute(void)
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-bool CPoint_Multi_Grid_Regression::Get_Samples(CSG_Parameter_Grid_List *pGrids, CSG_Shapes *pPoints, int iAttribute, CSG_Matrix &Samples, CSG_Strings &Names)
+bool CPoint_Multi_Grid_Regression::Get_Samples(CSG_Parameter_Grid_List *pGrids, CSG_Shapes *pPoints, int Attribute, CSG_Matrix &Samples, CSG_Strings &Names)
 {
-	int			iGrid;
-	double		zGrid;
-	CSG_Vector	Sample;
+	Names.Clear(); Names += pPoints->Get_Field_Name(Attribute); // Dependent Variable
 
-	//-----------------------------------------------------
-	bool	bCoord_X	= Parameters("COORD_X")->asBool();
-	bool	bCoord_Y	= Parameters("COORD_Y")->asBool();
+	for(int iGrid=0; iGrid<pGrids->Get_Grid_Count(); iGrid++) // Independent Variables
+	{
+		Names += pGrids->Get_Grid(iGrid)->Get_Name();
+	}
+
+	bool bCoord_X = Parameters("COORD_X")->asBool(); if( bCoord_X ) { Names += "X"; }
+	bool bCoord_Y = Parameters("COORD_Y")->asBool(); if( bCoord_Y ) { Names += "Y"; }
 
+	CSG_Vector Sample(1 + pGrids->Get_Grid_Count() + (bCoord_X ? 1 : 0) + (bCoord_Y ? 1 : 0));
+
+	//-----------------------------------------------------
 	TSG_Grid_Resampling	Resampling;
 
 	switch( Parameters("RESAMPLING")->asInt() )
@@ -361,50 +358,37 @@ bool CPoint_Multi_Grid_Regression::Get_Samples(CSG_Parameter_Grid_List *pGrids,
 	case  3: Resampling	= GRID_RESAMPLING_BSpline         ;	break;
 	}
 
-	Names	+= pPoints->Get_Field_Name(iAttribute);		// Dependent Variable
-
-	for(iGrid=0; iGrid<pGrids->Get_Grid_Count(); iGrid++)	// Independent Variables
-	{
-		Names	+= pGrids->Get_Grid(iGrid)->Get_Name();
-	}
-
-	if( bCoord_X )	{	Names	+= "X";	}
-	if( bCoord_Y )	{	Names	+= "Y";	}
-
-	Sample.Create(1 + pGrids->Get_Grid_Count() + (bCoord_X ? 1 : 0) + (bCoord_Y ? 1 : 0));
-
 	//-----------------------------------------------------
-	for(sLong iShape=0; iShape<pPoints->Get_Count() && Set_Progress(iShape, pPoints->Get_Count()); iShape++)
+	for(sLong i=0; i<pPoints->Get_Count() && Set_Progress(i, pPoints->Get_Count()); i++)
 	{
-		CSG_Shape	*pShape	= pPoints->Get_Shape(iShape);
+		CSG_Shape *pShape = pPoints->Get_Shape(i);
 
-		if( !pShape->is_NoData(iAttribute) )
+		if( !pShape->is_NoData(Attribute) )
 		{
-			Sample[0]	= pShape->asDouble(iAttribute);
+			Sample[0] = pShape->asDouble(Attribute);
 
 			for(int iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
 			{
 				for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
 				{
-					bool		bAdd	= true;
-					TSG_Point	Point	= pShape->Get_Point(iPoint, iPart);
+					int iPredictor; double z; CSG_Point Point = pShape->Get_Point(iPoint, iPart);
 
-					for(iGrid=0; iGrid<pGrids->Get_Grid_Count() && bAdd; iGrid++)
+					for(iPredictor=0; iPredictor<pGrids->Get_Grid_Count(); iPredictor++)
 					{
-						if( pGrids->Get_Grid(iGrid)->Get_Value(Point, zGrid, Resampling) )
+						if( pGrids->Get_Grid(iPredictor)->Get_Value(Point, z, Resampling) )
 						{
-							Sample[1 + iGrid]	= zGrid;
+							Sample[1 + iPredictor] = z;
 						}
 						else
 						{
-							bAdd	= false;
+							break;
 						}
 					}
 
-					if( bAdd )
+					if( iPredictor == pGrids->Get_Grid_Count() )
 					{
-						if( bCoord_X )	{	Sample[1 + iGrid++]	= Point.x;	}
-						if( bCoord_Y )	{	Sample[1 + iGrid++]	= Point.y;	}
+						if( bCoord_X ) { Sample[1 + iPredictor++] = Point.x; }
+						if( bCoord_Y ) { Sample[1 + iPredictor++] = Point.y; }
 
 						Samples.Add_Row(Sample);
 					}
@@ -431,29 +415,26 @@ bool CPoint_Multi_Grid_Regression::Set_Regression(CSG_Parameter_Grid_List *pGrid
 	}
 
 	//-----------------------------------------------------
-	int			iGrid, nGrids, x, y;
-	TSG_Point	p;
-
 	TSG_Grid_Resampling	Resampling;
 
 	switch( Parameters("RESAMPLING")->asInt() )
 	{
-	default:	Resampling	= GRID_RESAMPLING_NearestNeighbour;	break;
-	case  1:	Resampling	= GRID_RESAMPLING_Bilinear;			break;
-	case  2:	Resampling	= GRID_RESAMPLING_BicubicSpline;	break;
-	case  3:	Resampling	= GRID_RESAMPLING_BSpline;			break;
+	default: Resampling = GRID_RESAMPLING_NearestNeighbour; break;
+	case  1: Resampling = GRID_RESAMPLING_Bilinear        ; break;
+	case  2: Resampling = GRID_RESAMPLING_BicubicSpline   ; break;
+	case  3: Resampling = GRID_RESAMPLING_BSpline         ; break;
 	}
 
-	CSG_Grid	**ppGrids	= (CSG_Grid **)SG_Malloc(m_Regression.Get_nPredictors() * sizeof(CSG_Grid *));
+	//-----------------------------------------------------
+	CSG_Grid **ppGrids = (CSG_Grid **)SG_Malloc(m_Regression.Get_nPredictors() * sizeof(CSG_Grid *));
 
-	int	iCoord_X	= -1;
-	int	iCoord_Y	= -1;
+	int iCoord_X = -1, iCoord_Y = -1, nGrids = 0;
 
-	for(iGrid=0, nGrids=0; iGrid<m_Regression.Get_nPredictors(); iGrid++)
+	for(int iGrid=0; iGrid<m_Regression.Get_nPredictors(); iGrid++)
 	{
 		if( m_Regression.Get_Predictor(iGrid) < pGrids->Get_Grid_Count() )
 		{
-			ppGrids[nGrids++]	= pGrids->Get_Grid(m_Regression.Get_Predictor(iGrid));
+			ppGrids[nGrids++] = pGrids->Get_Grid(m_Regression.Get_Predictor(iGrid));
 		}
 		else if( m_Regression.Get_Predictor(iGrid) == pGrids->Get_Grid_Count() && Parameters("COORD_X")->asBool() )
 		{
@@ -468,24 +449,21 @@ bool CPoint_Multi_Grid_Regression::Set_Regression(CSG_Parameter_Grid_List *pGrid
 	pRegression->Set_Name(Name);
 
 	//-----------------------------------------------------
-	for(y=0, p.y=Get_YMin(); y<Get_NY() && Set_Progress_Rows(y); y++, p.y+=Get_Cellsize())
+	for(int y=0; y<Get_NY() && Set_Progress_Rows(y); y++)
 	{
-		for(x=0, p.x=Get_XMin(); x<Get_NX(); x++, p.x+=Get_Cellsize())
+		double py = Get_YMin() + y * Get_Cellsize();
+
+		for(int x=0; x<Get_NX(); x++)
 		{
-			bool	bOkay;
-			double	z	= m_Regression.Get_RConst();
+			double px = Get_XMin() + x * Get_Cellsize(), pz, z = m_Regression.Get_RConst();
 
-			for(iGrid=0, bOkay=true; bOkay && iGrid<nGrids; iGrid++)
-			{
-				double	zGrid;
+			bool bOkay = true;
 
-				if( ppGrids[iGrid]->Get_Value(p, zGrid, Resampling) )
-				{
-					z	+= m_Regression.Get_RCoeff(iGrid) * zGrid;
-				}
-				else
+			for(int iGrid=0; bOkay && iGrid<nGrids; iGrid++)
+			{
+				if( (bOkay = ppGrids[iGrid]->Get_Value(px, py, pz, Resampling)) == true )
 				{
-					bOkay	= false;
+					z += m_Regression.Get_RCoeff(iGrid) * pz;
 				}
 			}
 
@@ -494,12 +472,12 @@ bool CPoint_Multi_Grid_Regression::Set_Regression(CSG_Parameter_Grid_List *pGrid
 			{
 				if( iCoord_X >= 0 )
 				{
-					z	+= m_Regression.Get_RCoeff(iCoord_X) * p.x;
+					z += m_Regression.Get_RCoeff(iCoord_X) * px;
 				}
 
 				if( iCoord_Y >= 0 )
 				{
-					z	+= m_Regression.Get_RCoeff(iCoord_Y) * p.y;
+					z += m_Regression.Get_RCoeff(iCoord_Y) * py;
 				}
 
 				pRegression->Set_Value (x, y, z);
@@ -531,45 +509,44 @@ bool CPoint_Multi_Grid_Regression::Set_Residuals(CSG_Shapes *pResiduals)
 	}
 
 	//-----------------------------------------------------
-	CSG_Shapes	*pPoints		= Parameters("POINTS"    )->asShapes();
-	CSG_Grid	*pRegression	= Parameters("REGRESSION")->asGrid();
-	int			iAttribute		= Parameters("ATTRIBUTE" )->asInt();
+	CSG_Shapes   *pPoints = Parameters("POINTS"    )->asShapes();
+	int         Attribute = Parameters("ATTRIBUTE" )->asInt   ();
+	CSG_Grid *pRegression = Parameters("REGRESSION")->asGrid  ();
 
 	TSG_Grid_Resampling	Resampling;
 
 	switch( Parameters("RESAMPLING")->asInt() )
 	{
-	default:	Resampling	= GRID_RESAMPLING_NearestNeighbour;	break;
-	case  1:	Resampling	= GRID_RESAMPLING_Bilinear;			break;
-	case  2:	Resampling	= GRID_RESAMPLING_BicubicSpline;	break;
-	case  3:	Resampling	= GRID_RESAMPLING_BSpline;			break;
+	default: Resampling = GRID_RESAMPLING_NearestNeighbour; break;
+	case  1: Resampling = GRID_RESAMPLING_Bilinear        ; break;
+	case  2: Resampling = GRID_RESAMPLING_BicubicSpline   ; break;
+	case  3: Resampling = GRID_RESAMPLING_BSpline         ; break;
 	}
 
 	//-----------------------------------------------------
 	pResiduals->Create(SHAPE_TYPE_Point, CSG_String::Format("%s.%s [%s]", pPoints->Get_Name(), Parameters("ATTRIBUTE")->asString(), _TL("Residuals")));
-	pResiduals->Add_Field(pPoints->Get_Field_Name(iAttribute), SG_DATATYPE_Double);
+	pResiduals->Add_Field(pPoints->Get_Field_Name(Attribute), SG_DATATYPE_Double);
 	pResiduals->Add_Field("TREND"	, SG_DATATYPE_Double);
 	pResiduals->Add_Field("RESIDUAL", SG_DATATYPE_Double);
 
 	//-----------------------------------------------------
 	for(sLong iShape=0; iShape<pPoints->Get_Count() && Set_Progress(iShape, pPoints->Get_Count()); iShape++)
 	{
-		CSG_Shape	*pShape	= pPoints->Get_Shape(iShape);
+		CSG_Shape *pShape = pPoints->Get_Shape(iShape);
 
-		if( !pShape->is_NoData(iAttribute) )
+		if( !pShape->is_NoData(Attribute) )
 		{
-			double	zShape	= pShape->asDouble(iAttribute);
+			double zShape = pShape->asDouble(Attribute);
 
 			for(int iPart=0; iPart<pShape->Get_Part_Count(); iPart++)
 			{
 				for(int iPoint=0; iPoint<pShape->Get_Point_Count(iPart); iPoint++)
 				{
-					double		zGrid;
-					TSG_Point	Point	= pShape->Get_Point(iPoint, iPart);
+					double zGrid; CSG_Point Point = pShape->Get_Point(iPoint, iPart);
 
 					if( pRegression->Get_Value(Point, zGrid, Resampling) )
 					{
-						CSG_Shape	*pResidual	= pResiduals->Add_Shape();
+						CSG_Shape *pResidual = pResiduals->Add_Shape();
 
 						pResidual->Add_Point(Point);
 						pResidual->Set_Value(0, zShape);
@@ -588,14 +565,13 @@ bool CPoint_Multi_Grid_Regression::Set_Residuals(CSG_Shapes *pResiduals)
 //---------------------------------------------------------
 bool CPoint_Multi_Grid_Regression::Set_Residual_Corr(CSG_Grid *pRegression, CSG_Shapes *pResiduals, CSG_Grid *pCorrection)
 {
-	//-----------------------------------------------------
 	if( !pCorrection )
 	{
 		return( false );
 	}
 
 	//-----------------------------------------------------
-	CSG_Shapes	Residuals;
+	CSG_Shapes Residuals;
 
 	if( !pResiduals )
 	{
@@ -604,47 +580,46 @@ bool CPoint_Multi_Grid_Regression::Set_Residual_Corr(CSG_Grid *pRegression, CSG_
 			return( false );
 		}
 
-		pResiduals	= &Residuals;
+		pResiduals = &Residuals;
 	}
 
 	//-----------------------------------------------------
 	switch( Parameters("RESIDUAL_COR")->asInt() )
 	{
-	default:	// Multlevel B-Spline Interpolation
-		SG_RUN_TOOL_ExitOnError("grid_spline", 4,
-				SG_TOOL_PARAMETER_SET("SHAPES"           , pResiduals)
-			&&  SG_TOOL_PARAMETER_SET("FIELD"            , 2)
-			&&  SG_TOOL_PARAMETER_SET("TARGET_DEFINITION", 1)	// grid or grid system
-			&&  SG_TOOL_PARAMETER_SET("TARGET_OUT_GRID"  , pCorrection)
+	default:
+		SG_RUN_TOOL_ExitOnError("grid_spline", 4, // Multlevel B-Spline Interpolation
+			   SG_TOOL_PARAMETER_SET("SHAPES"           , pResiduals )
+			&& SG_TOOL_PARAMETER_SET("FIELD"            , 2          )
+			&& SG_TOOL_PARAMETER_SET("TARGET_DEFINITION", 1          ) // grid or grid system
+			&& SG_TOOL_PARAMETER_SET("TARGET_OUT_GRID"  , pCorrection)
 		);
 		break;
 
-	case  1:	// Inverse Distance Weighted
-		SG_RUN_TOOL_ExitOnError("grid_gridding", 1,
-				SG_TOOL_PARAMETER_SET("SHAPES"           , pResiduals)
-			&&  SG_TOOL_PARAMETER_SET("FIELD"            , 2)
-			&&  SG_TOOL_PARAMETER_SET("TARGET_DEFINITION", 1)	// grid or grid system
-			&&  SG_TOOL_PARAMETER_SET("TARGET_OUT_GRID"  , pCorrection)
-			&&  SG_TOOL_PARAMETER_SET("SEARCH_RANGE"     , 1)	// global
-			&&  SG_TOOL_PARAMETER_SET("SEARCH_POINTS_ALL", 1)	// all points within search distance
+	case  1:
+		SG_RUN_TOOL_ExitOnError("grid_gridding", 1, // Inverse Distance Weighted
+			   SG_TOOL_PARAMETER_SET("POINTS"           , pResiduals )
+			&& SG_TOOL_PARAMETER_SET("FIELD"            , 2          )
+			&& SG_TOOL_PARAMETER_SET("TARGET_DEFINITION", 1          ) // grid or grid system
+			&& SG_TOOL_PARAMETER_SET("TARGET_OUT_GRID"  , pCorrection)
+			&& SG_TOOL_PARAMETER_SET("SEARCH_RANGE"     , 1          ) // global
+			&& SG_TOOL_PARAMETER_SET("SEARCH_POINTS_ALL", 1          ) // all points within search distance
+		//	&& SG_TOOL_PARAMETER_SET("DW_WEIGHTING"     , 1          ) // inverse distance to a power (default)
+		//	&& SG_TOOL_PARAMETER_SET("DW_IDW_POWER"     , 2.         ) // power
 		);
 		break;
 	}
 
 	//-----------------------------------------------------
 	#pragma omp parallel for
-	for(int y=0; y<Get_NY(); y++)
+	for(int y=0; y<Get_NY(); y++) for(int x=0; x<Get_NX(); x++)
 	{
-		for(int x=0; x<Get_NX(); x++)
+		if( pRegression->is_NoData(x, y) || pCorrection->is_NoData(x, y) )
 		{
-			if( pRegression->is_NoData(x, y) || pCorrection->is_NoData(x, y) )
-			{
-				pCorrection->Set_NoData(x, y);
-			}
-			else
-			{
-				pCorrection->Add_Value(x, y, pRegression->asDouble(x, y));
-			}
+			pCorrection->Set_NoData(x, y);
+		}
+		else
+		{
+			pCorrection->Add_Value(x, y, pRegression->asDouble(x, y));
 		}
 	}
 
@@ -662,10 +637,8 @@ bool CPoint_Multi_Grid_Regression::Set_Residual_Corr(CSG_Grid *pRegression, CSG_
 ///////////////////////////////////////////////////////////
 
 //---------------------------------------------------------
-
-//	//-----------------------------------------------------
-//	Parameters.Add_Choice(
-//		NULL	,"CORRECTION"	, _TL("Adjustment"),
+//	Parameters.Add_Choice("",
+//		"CORRECTION", _TL("Adjustment"),
 //		_TL(""),
 //		CSG_String::Format("%s|%s|%s|%s|%s|%s",
 //			_TL("Smith"),
@@ -677,16 +650,16 @@ bool CPoint_Multi_Grid_Regression::Set_Residual_Corr(CSG_Grid *pRegression, CSG_
 //		), 1
 //	);
 //
-//	TSG_Regression_Correction	m_Correction;
+//	TSG_Regression_Correction m_Correction;
 //
 //	switch( Parameters("CORRECTION")->asInt() )
 //	{
-//	case 0:	m_Correction	= REGRESSION_CORR_Smith;		break;
-//	case 1:	m_Correction	= REGRESSION_CORR_Wherry_1;		break;
-//	case 2:	m_Correction	= REGRESSION_CORR_Wherry_2;		break;
-//	case 3:	m_Correction	= REGRESSION_CORR_Olkin_Pratt;	break;
-//	case 4:	m_Correction	= REGRESSION_CORR_Pratt;		break;
-//	case 5:	m_Correction	= REGRESSION_CORR_Claudy_3;		break;
+//	case 0:	m_Correction = REGRESSION_CORR_Smith      ; break;
+//	case 1:	m_Correction = REGRESSION_CORR_Wherry_1   ; break;
+//	case 2:	m_Correction = REGRESSION_CORR_Wherry_2   ; break;
+//	case 3:	m_Correction = REGRESSION_CORR_Olkin_Pratt; break;
+//	case 4:	m_Correction = REGRESSION_CORR_Pratt      ; break;
+//	case 5:	m_Correction = REGRESSION_CORR_Claudy_3   ; break;
 //	}
 //
 


=====================================
saga-gis/version.cmake
=====================================
@@ -1,7 +1,7 @@
 # The version number.
 set (SAGA_VERSION_MAJOR 9)
 set (SAGA_VERSION_MINOR 3)
-set (SAGA_VERSION_PATCH 1)
+set (SAGA_VERSION_PATCH 2)
 
 # get git commit hash (or dirty if git is not installed)
 



View it on GitLab: https://salsa.debian.org/debian-gis-team/saga/-/commit/b55c37e530c6112a69e3bd0da325a0859009ffca

-- 
View it on GitLab: https://salsa.debian.org/debian-gis-team/saga/-/commit/b55c37e530c6112a69e3bd0da325a0859009ffca
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-grass-devel/attachments/20240313/9db2110f/attachment-0001.htm>


More information about the Pkg-grass-devel mailing list