[saga] 02/07: Imported Upstream version 2.3.1+dfsg

Bas Couwenberg sebastic at debian.org
Fri Jul 8 18:10:48 UTC 2016


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository saga.

commit acdd2222aae06b29cbaaf48511638c74eecc97bc
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Jul 8 18:48:03 2016 +0200

    Imported Upstream version 2.3.1+dfsg
---
 README                                             |   2 +-
 configure                                          |  23 +-
 configure.ac                                       |   3 +-
 src/modules/grid/grid_gridding/nn/nn.h             |   4 +-
 src/modules/grid/grid_gridding/nn/nncommon.c       |   2 +-
 src/modules/grid/grid_tools/Grid_Value_NoData.cpp  |   2 +-
 src/modules/imagery/Makefile.am                    |   2 +-
 src/modules/imagery/Makefile.in                    |   2 +-
 .../imagery_classification/MLB_Interface.cpp       |   2 -
 .../imagery/imagery_classification/Makefile.am     |   4 -
 .../imagery/imagery_classification/Makefile.in     |   9 +-
 .../imagery_classification/classify_isocluster.cpp | 380 ---------------------
 .../imagery_classification/cluster_isodata.h       | 147 --------
 src/modules/io/io_esri_e00/e00compr/e00read.c      |   2 +-
 src/modules/io/io_gdal/ogr_import.cpp              |  12 +-
 src/modules/io/io_shapes_dxf/dxf_import.cpp        |   4 +
 src/modules/io/io_shapes_dxf/dxf_import.h          |   4 +
 src/modules/table/table_calculus/MLB_Interface.cpp |   3 +
 src/modules/table/table_calculus/Makefile.am       |   2 +
 src/modules/table/table_calculus/Makefile.in       |   5 +-
 .../table_calculus/table_record_statistics.cpp     | 332 ++++++++++++++++++
 .../table_calculus/table_record_statistics.h}      | 214 ++++++------
 .../table/table_tools/table_field_deletion.cpp     | 101 +++---
 src/saga_core/saga_api/saga_api.h                  |   4 +-
 src/saga_core/saga_gui/res/saga.bra.txt            |   7 +
 src/saga_core/saga_gui/res/saga.ger.txt            |   7 +
 src/saga_core/saga_gui/res/saga.lng.txt            |   7 +
 src/scripting/helper/make_saga_release.bat         |   2 +-
 .../helpers/saga_cmd_param_interface/tools.py      |   5 +-
 29 files changed, 562 insertions(+), 731 deletions(-)

diff --git a/README b/README
index dfbaa78..a8a258a 100755
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
 _______________________________________________________________________________
 
-         SAGA 2.3.0 - System for Automated Geoscientific Analyses
+         SAGA 2.3.1 - System for Automated Geoscientific Analyses
 _______________________________________________________________________________
 
 * Introduction
diff --git a/configure b/configure
index 4b67776..79b9185 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for saga 2.3.0.
+# Generated by GNU Autoconf 2.69 for saga 2.3.1.
 #
 # Report bugs to <BUG-REPORT-ADDRESS>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='saga'
 PACKAGE_TARNAME='saga'
-PACKAGE_VERSION='2.3.0'
-PACKAGE_STRING='saga 2.3.0'
+PACKAGE_VERSION='2.3.1'
+PACKAGE_STRING='saga 2.3.1'
 PACKAGE_BUGREPORT='BUG-REPORT-ADDRESS'
 PACKAGE_URL=''
 
@@ -1409,7 +1409,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures saga 2.3.0 to adapt to many kinds of systems.
+\`configure' configures saga 2.3.1 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1480,7 +1480,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of saga 2.3.0:";;
+     short | recursive ) echo "Configuration of saga 2.3.1:";;
    esac
   cat <<\_ACEOF
 
@@ -1614,7 +1614,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-saga configure 2.3.0
+saga configure 2.3.1
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2158,7 +2158,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by saga $as_me 2.3.0, which was
+It was created by saga $as_me 2.3.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3025,7 +3025,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='saga'
- VERSION='2.3.0'
+ VERSION='2.3.1'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -18996,7 +18996,7 @@ $as_echo "$as_me: WARNING: cannot determine SWIG version" >&2;}
 
 fi
 #AC_CONFIG_FILES([Makefile])
-ac_config_files="$ac_config_files Makefile src/Makefile src/saga_core/Makefile src/saga_core/saga_api/Makefile src/saga_core/saga_gdi/Makefile src/saga_core/saga_gui/Makefile src/saga_core/saga_gui/man/Makefile src/saga_core/saga_cmd/Makefile src/saga_core/saga_cmd/man/Makefile src/modules/Makefile src/modules/climate/Makefile src/modules/climate/climate_tools/Makefile src/modules/contrib/Makefile src/modules/contrib/contrib_peregro/Makefile src/modules/db/Makefile src/modules/db/db_odbc [...]
+ac_config_files="$ac_config_files Makefile src/Makefile src/saga_core/Makefile src/saga_core/saga_api/Makefile src/saga_core/saga_gdi/Makefile src/saga_core/saga_gui/Makefile src/saga_core/saga_gui/man/Makefile src/saga_core/saga_cmd/Makefile src/saga_core/saga_cmd/man/Makefile src/modules/Makefile src/modules/climate/Makefile src/modules/climate/climate_tools/Makefile src/modules/contrib/Makefile src/modules/contrib/contrib_peregro/Makefile src/modules/db/Makefile src/modules/db/db_odbc [...]
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -19585,7 +19585,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by saga $as_me 2.3.0, which was
+This file was extended by saga $as_me 2.3.1, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -19651,7 +19651,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-saga config.status 2.3.0
+saga config.status 2.3.1
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -20201,6 +20201,7 @@ do
     "src/modules/grid/grid_visualisation/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/grid/grid_visualisation/Makefile" ;;
     "src/modules/imagery/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/imagery/Makefile" ;;
     "src/modules/imagery/imagery_classification/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/imagery/imagery_classification/Makefile" ;;
+    "src/modules/imagery/imagery_isocluster/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/imagery/imagery_isocluster/Makefile" ;;
     "src/modules/imagery/imagery_opencv/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/imagery/imagery_opencv/Makefile" ;;
     "src/modules/imagery/imagery_maxent/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/imagery/imagery_maxent/Makefile" ;;
     "src/modules/imagery/imagery_photogrammetry/Makefile") CONFIG_FILES="$CONFIG_FILES src/modules/imagery/imagery_photogrammetry/Makefile" ;;
diff --git a/configure.ac b/configure.ac
index 46d18ea..f82652f 100755
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ(2.59)
-AC_INIT(saga, 2.3.0, BUG-REPORT-ADDRESS)
+AC_INIT(saga, 2.3.1, BUG-REPORT-ADDRESS)
 AC_CONFIG_SRCDIR([src/saga_core/saga_gui/wksp_data_menu_files.cpp])
 AC_CONFIG_HEADER([config.h])
 AC_CONFIG_MACRO_DIR([m4])
@@ -294,6 +294,7 @@ AC_OUTPUT(Makefile \
 	src/modules/grid/grid_visualisation/Makefile \
 	src/modules/imagery/Makefile \
 	src/modules/imagery/imagery_classification/Makefile \
+	src/modules/imagery/imagery_isocluster/Makefile \
 	src/modules/imagery/imagery_opencv/Makefile \
 	src/modules/imagery/imagery_maxent/Makefile \
 	src/modules/imagery/imagery_photogrammetry/Makefile \
diff --git a/src/modules/grid/grid_gridding/nn/nn.h b/src/modules/grid/grid_gridding/nn/nn.h
index f0d5c7f..b16d5f6 100755
--- a/src/modules/grid/grid_gridding/nn/nn.h
+++ b/src/modules/grid/grid_gridding/nn/nn.h
@@ -228,7 +228,7 @@ void nnpi_setwmin(nnpi* nn, double wmin);
 /** `nnhpi' -- "Natural Neighbours Hashing Point Interpolator" -- is a
  ** structure for conducting consequitive Natural Neighbours interpolations
  ** from the same set of observation points, designed to take advantage of
- ** repeated interpolations in the same point. It allows to modify Z
+ ** repeated interpolations in the same point. It allows modifying Z
  ** coordinate of observed data between interpolations (because this does not
  ** affect the interpolant weights).
  */
@@ -279,7 +279,7 @@ void nnhpi_setwmin(nnhpi* nn, double wmin);
 
 /** `nnai' -- "Natural Neighbours Array Interpolator" is a structure for
  ** conducting consequitive Natural Neighbours interpolations from the same
- ** set of observation points in the same set of points. It allows to modify Z
+ ** set of observation points in the same set of points. It allows modifying Z
  ** coordinate of data between interpolations (because this does not
  ** affect the interpolant weights).
  *
diff --git a/src/modules/grid/grid_gridding/nn/nncommon.c b/src/modules/grid/grid_gridding/nn/nncommon.c
index 15a4cc5..9d8918c 100755
--- a/src/modules/grid/grid_gridding/nn/nncommon.c
+++ b/src/modules/grid/grid_gridding/nn/nncommon.c
@@ -13,7 +13,7 @@
  *
  * Revisions:      15/11/2002 PS: Changed name from "utils.c"
  *                 28/02/2003 PS: Modified points_read() to do the job without
- *                   rewinding the file. This allows to read from stdin when
+ *                   rewinding the file. This allows reading from stdin when
  *                   necessary.
  *                 09/04/2003 PS: Modified points_read() to read from a
  *                   file specified by name, not by handle.
diff --git a/src/modules/grid/grid_tools/Grid_Value_NoData.cpp b/src/modules/grid/grid_tools/Grid_Value_NoData.cpp
index b74d94b..0ac71e9 100755
--- a/src/modules/grid/grid_tools/Grid_Value_NoData.cpp
+++ b/src/modules/grid/grid_tools/Grid_Value_NoData.cpp
@@ -77,7 +77,7 @@ CGrid_Value_NoData::CGrid_Value_NoData(void)
 	Set_Author		("O.Conrad (c) 2016");
 
 	Set_Description	(_TW(
-		"This tool allows to change a grid's no-data value or value range "
+		"This tool allows changing a grid's no-data value or value range "
 		"definition. It does not change the cell values of the grid. "
 		"Its main purpose is to support this type of operation for tool "
 		"chains and scripting environments."
diff --git a/src/modules/imagery/Makefile.am b/src/modules/imagery/Makefile.am
index f3135bd..7d3b55f 100755
--- a/src/modules/imagery/Makefile.am
+++ b/src/modules/imagery/Makefile.am
@@ -1 +1 @@
-SUBDIRS = imagery_classification imagery_maxent imagery_opencv imagery_photogrammetry imagery_segmentation imagery_svm imagery_tools imagery_vigra
+SUBDIRS = imagery_classification imagery_isocluster imagery_maxent imagery_opencv imagery_photogrammetry imagery_segmentation imagery_svm imagery_tools imagery_vigra
diff --git a/src/modules/imagery/Makefile.in b/src/modules/imagery/Makefile.in
index 966a20e..41f8694 100644
--- a/src/modules/imagery/Makefile.in
+++ b/src/modules/imagery/Makefile.in
@@ -343,7 +343,7 @@ target_alias = @target_alias@
 top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
-SUBDIRS = imagery_classification imagery_maxent imagery_opencv imagery_photogrammetry imagery_segmentation imagery_svm imagery_tools imagery_vigra
+SUBDIRS = imagery_classification imagery_isocluster imagery_maxent imagery_opencv imagery_photogrammetry imagery_segmentation imagery_svm imagery_tools imagery_vigra
 all: all-recursive
 
 .SUFFIXES:
diff --git a/src/modules/imagery/imagery_classification/MLB_Interface.cpp b/src/modules/imagery/imagery_classification/MLB_Interface.cpp
index bb4067a..d22de60 100755
--- a/src/modules/imagery/imagery_classification/MLB_Interface.cpp
+++ b/src/modules/imagery/imagery_classification/MLB_Interface.cpp
@@ -103,7 +103,6 @@ CSG_String Get_Info(int i)
 #include "decision_tree.h"
 #include "classify_supervised_polygons.h"
 #include "classification_quality.h"
-#include "classify_isocluster.h"
 
 
 //---------------------------------------------------------
@@ -120,7 +119,6 @@ CSG_Module *		Create_Module(int i)
 	case  4:	return( new CPolygon_Classify_Supervised( true) );
 	case  5:	return( new CPolygon_Classify_Supervised(false) );
 	case  6:	return( new CClassification_Quality );
-	case  7:	return( new CGrid_Cluster_ISODATA );
 
 	case  8:	return( NULL );
 	default:	return( MLB_INTERFACE_SKIP_MODULE );
diff --git a/src/modules/imagery/imagery_classification/Makefile.am b/src/modules/imagery/imagery_classification/Makefile.am
index 279c114..50c3e4e 100755
--- a/src/modules/imagery/imagery_classification/Makefile.am
+++ b/src/modules/imagery/imagery_classification/Makefile.am
@@ -11,19 +11,15 @@ libimagery_classification_la_SOURCES =\
 change_detection.cpp\
 classification_quality.cpp\
 classify_cluster_analysis.cpp\
-classify_isocluster.cpp\
 classify_supervised.cpp\
 classify_supervised_polygons.cpp\
-cluster_isodata.cpp\
 decision_tree.cpp\
 MLB_Interface.cpp\
 change_detection.h\
 classification_quality.h\
 classify_cluster_analysis.h\
-classify_isocluster.h\
 classify_supervised.h\
 classify_supervised_polygons.h\
-cluster_isodata.h\
 decision_tree.h\
 MLB_Interface.h
 
diff --git a/src/modules/imagery/imagery_classification/Makefile.in b/src/modules/imagery/imagery_classification/Makefile.in
index f6d64a5..096c3fd 100644
--- a/src/modules/imagery/imagery_classification/Makefile.in
+++ b/src/modules/imagery/imagery_classification/Makefile.in
@@ -139,8 +139,7 @@ libimagery_classification_la_DEPENDENCIES =  \
 	$(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
 am_libimagery_classification_la_OBJECTS = change_detection.lo \
 	classification_quality.lo classify_cluster_analysis.lo \
-	classify_isocluster.lo classify_supervised.lo \
-	classify_supervised_polygons.lo cluster_isodata.lo \
+	classify_supervised.lo classify_supervised_polygons.lo \
 	decision_tree.lo MLB_Interface.lo
 libimagery_classification_la_OBJECTS =  \
 	$(am_libimagery_classification_la_OBJECTS)
@@ -394,19 +393,15 @@ libimagery_classification_la_SOURCES = \
 change_detection.cpp\
 classification_quality.cpp\
 classify_cluster_analysis.cpp\
-classify_isocluster.cpp\
 classify_supervised.cpp\
 classify_supervised_polygons.cpp\
-cluster_isodata.cpp\
 decision_tree.cpp\
 MLB_Interface.cpp\
 change_detection.h\
 classification_quality.h\
 classify_cluster_analysis.h\
-classify_isocluster.h\
 classify_supervised.h\
 classify_supervised_polygons.h\
-cluster_isodata.h\
 decision_tree.h\
 MLB_Interface.h
 
@@ -493,10 +488,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/change_detection.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/classification_quality.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/classify_cluster_analysis.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/classify_isocluster.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/classify_supervised.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/classify_supervised_polygons.Plo at am__quote@
- at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/cluster_isodata.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/decision_tree.Plo at am__quote@
 
 .cpp.o:
diff --git a/src/modules/imagery/imagery_classification/classify_isocluster.cpp b/src/modules/imagery/imagery_classification/classify_isocluster.cpp
deleted file mode 100755
index 3786c8c..0000000
--- a/src/modules/imagery/imagery_classification/classify_isocluster.cpp
+++ /dev/null
@@ -1,380 +0,0 @@
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                imagery_classification                 //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                classify_isocluster.cpp                //
-//                                                       //
-//                 Copyright (C) 2016 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA is distributed in the hope that it will be       //
-// useful, but WITHOUT ANY WARRANTY; without even the    //
-// implied warranty of MERCHANTABILITY or FITNESS FOR A  //
-// PARTICULAR PURPOSE. See the GNU General Public        //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU General    //
-// Public License along with this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include "classify_isocluster.h"
-
-//---------------------------------------------------------
-#include "cluster_isodata.h"
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-CGrid_Cluster_ISODATA::CGrid_Cluster_ISODATA(void)
-{
-	//-----------------------------------------------------
-	Set_Name		(_TL("ISODATA Clustering for Grids"));
-
-	Set_Author		("O.Conrad (c) 2016");
-
-	Set_Description	(_TW(
-		"This tool executes the Isodata unsupervised "
-		"classification - clustering algorithm. Isodata "
-		"stands for Iterative Self-Organizing Data Analysis "
-		"Techniques. This is a more sophisticated algorithm "
-		"which allows the number of clusters to be "
-		"automatically adjusted during the iteration by "
-		"merging similar clusters and splitting clusters "
-		"with large standard deviations.\n"
-		"The tool is based on Christos Iosifidis' Isodata implementation:\n"
-		"<a target=\"_blank\" href=\"http://users.ntua.gr/chiossif/Free_As_Freedom_Software/isodata.c\">isodata.c</a>\n"
-		"\n"
-		"Further references:\n"
-		"Memarsadeghi, N., Mount, D. M., Netanyahu, N. S., Le Moigne, J. (2007): "
-		"A Fast Implementation of the ISODATA Clustering Algorithm. "
-		"International Journal of Computational Geometry and Applications, 17, 71-103. "
-		"<a target=\"_blank\" href=\"https://www.cs.umd.edu/~mount/Projects/ISODATA/ijcga07-isodata.pdf\">online</a>\n"
-		"\n"
-		"<a target=\"_blank\" href=\"https://www.cs.umd.edu/~mount/Projects/ISODATA/\">A Fast Implementation of the ISODATA Clustering Algorithm</a>"
-	));
-
-	//-----------------------------------------------------
-	Parameters.Add_Grid_List(
-		NULL	, "FEATURES"	, _TL("Features"),
-		_TL(""),
-		PARAMETER_INPUT
-	);
-
-	Parameters.Add_Grid(
-		NULL	, "CLUSTER"		, _TL("Clusters"),
-		_TL(""),
-		PARAMETER_OUTPUT, true, SG_DATATYPE_Byte
-	);
-
-	Parameters.Add_Table(
-		NULL	, "STATISTICS"	, _TL("Statistics"),
-		_TL(""),
-		PARAMETER_OUTPUT
-	);
-
-	//-----------------------------------------------------
-	Parameters.Add_Value(
-		NULL	, "NORMALIZE"	, _TL("Normalize"),
-		_TL(""),
-		PARAMETER_TYPE_Bool, false
-	);
-
-	Parameters.Add_Value(
-		NULL	, "ITERATIONS"	, _TL("Maximum Number of Iterations"),
-		_TL(""),
-		PARAMETER_TYPE_Int, 20, 3, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "CLUSTER_INI"	, _TL("Initial Number of Clusters"),
-		_TL(""),
-		PARAMETER_TYPE_Int, 5, 0, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "CLUSTER_MAX"	, _TL("Maximum Number of Clusters"),
-		_TL(""),
-		PARAMETER_TYPE_Int, 16, 3, true
-	);
-
-	Parameters.Add_Value(
-		NULL	, "SAMPLES_MIN"	, _TL("Minimum Number of Samples in a Cluster"),
-		_TL(""),
-		PARAMETER_TYPE_Int, 5, 2, true
-	);
-
-	//Parameters.Add_Value(
-	//	NULL	, "DIST_MAX"	, _TL("Distance Threshold"),
-	//	_TL("Clusters, which are closer than this distance to each other, are merged."),
-	//	PARAMETER_TYPE_Double, 0.001, 0.0, true
-	//);
-
-	//Parameters.Add_Value(
-	//	NULL	, "STDV_MAX"	, _TL("Maximum Standard Deviation within a Cluster"),
-	//	_TL(""),
-	//	PARAMETER_TYPE_Double, 10.0, 0.0, true
-	//);
-
-	Parameters.Add_Value(
-		NULL	, "RGB_COLORS"	, _TL("Update Colors from Features"),
-		_TL("Use the first three features in list to obtain blue, green, red components for class colour in look-up table."),
-		PARAMETER_TYPE_Bool, true
-	)->Set_UseInCMD(false);
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-int CGrid_Cluster_ISODATA::On_Parameter_Changed(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
-{
-	return(CSG_Module_Grid::On_Parameter_Changed(pParameters, pParameter));
-}
-
-//---------------------------------------------------------
-int CGrid_Cluster_ISODATA::On_Parameters_Enable(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
-{
-	if( !SG_STR_CMP(pParameter->Get_Identifier(), "FEATURES") )
-	{
-		pParameters->Set_Enabled("RGB_COLORS", pParameter->asGridList()->Get_Count() >= 3);
-	}
-
-	return( CSG_Module_Grid::On_Parameters_Enable(pParameters, pParameter) );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-bool CGrid_Cluster_ISODATA::On_Execute(void)
-{
-	int		iFeature;
-	sLong	iCell;
-	size_t	iSample, iCluster;
-
-	//-----------------------------------------------------
-	CSG_Parameter_Grid_List	*pFeatures	= Parameters("FEATURES")->asGridList();
-
-	CSG_Grid	*pCluster	= Parameters("CLUSTER")->asGrid();
-
-	pCluster->Set_NoData_Value(0.0);
-
-	bool	bNormalize	= Parameters("NORMALIZE")->asBool();
-
-	//-----------------------------------------------------
-	TSG_Data_Type	Data_Type;
-
-	if( bNormalize )
-	{
-		Data_Type	= SG_DATATYPE_Float;
-	}
-	else
-	{
-		Data_Type	= SG_DATATYPE_Char;
-
-		for(iFeature=0; iFeature<pFeatures->Get_Count(); iFeature++)
-		{
-			if( Data_Type < pFeatures->asGrid(iFeature)->Get_Type() )
-			{
-				Data_Type	= pFeatures->asGrid(iFeature)->Get_Type();
-			}
-		}
-
-		Message_Add(CSG_String::Format("\n%s: %s", _TL("internal data type"), SG_Data_Type_Get_Name(Data_Type).c_str()), false);
-	}
-
-	//-----------------------------------------------------
-	CCluster_ISODATA	Cluster(pFeatures->Get_Count(), Data_Type);
-
-	Cluster.Set_Max_Iterations(Parameters("ITERATIONS" )->asInt   ());
-	Cluster.Set_Ini_Clusters  (Parameters("CLUSTER_INI")->asInt   ());
-	Cluster.Set_Max_Clusters  (Parameters("CLUSTER_MAX")->asInt   ());
-	Cluster.Set_Min_Samples   (Parameters("SAMPLES_MIN")->asInt   ());
-//	Cluster.Set_Max_Distance  (Parameters("DIST_MAX"   )->asDouble());
-//	Cluster.Set_Max_StdDev    (Parameters("STDV_MAX"   )->asDouble());
-
-	//-----------------------------------------------------
-	for(iCell=0; iCell<Get_NCells() && Set_Progress_NCells(iCell); iCell++)
-	{
-		CSG_Vector	Features(pFeatures->Get_Count());
-
-		for(iFeature=0; Features.Get_Size() && iFeature<pFeatures->Get_Count(); iFeature++)
-		{
-			if( pFeatures->asGrid(iFeature)->is_NoData(iCell) )
-			{
-				Features.Destroy();
-			}
-			else
-			{
-				Features[iFeature]	= pFeatures->asGrid(iFeature)->asDouble(iCell);
-
-				if( bNormalize )
-				{
-					Features[iFeature]	= (Features[iFeature] - pFeatures->asGrid(iFeature)->Get_Mean()) / pFeatures->asGrid(iFeature)->Get_StdDev();
-				}
-			}
-		}
-
-		if( Features.Get_Size() )
-		{
-			Cluster.Add_Sample(Features);
-
-			pCluster->Set_Value(iCell, 1.0);
-		}
-		else
-		{
-			pCluster->Set_Value(iCell, 0.0);
-		}
-	}
-
-	//-----------------------------------------------------
-	if( !Cluster.Run() )
-	{
-		return( false );
-	}
-
-	//-----------------------------------------------------
-	for(iCell=0, iSample=0; iCell<Get_NCells() && Set_Progress_NCells(iCell); iCell++)
-	{
-		if( pCluster->asInt(iCell) )
-		{
-			pCluster->Set_Value(iCell, 1 + Cluster.Get_Cluster(iSample++));
-		}
-	}
-
-	//-----------------------------------------------------
-	CSG_Table	&Statistics	= *Parameters("STATISTICS")->asTable();
-
-	Statistics.Destroy();
-	Statistics.Set_Name(_TL("ISODATA Cluster Statistics"));
-
-	Statistics.Add_Field("CLUSTER" , SG_DATATYPE_Int);
-	Statistics.Add_Field("ELEMENTS", SG_DATATYPE_Int);
-	Statistics.Add_Field("MEANDIST", SG_DATATYPE_Double);
-
-	for(iFeature=0; iFeature<pFeatures->Get_Count(); iFeature++)
-	{
-		Statistics.Add_Field(CSG_String::Format("MEAN.%s", pFeatures->asGrid(iFeature)->Get_Name()), SG_DATATYPE_Double);
-		Statistics.Add_Field(CSG_String::Format("STDV.%s", pFeatures->asGrid(iFeature)->Get_Name()), SG_DATATYPE_Double);
-	}
-
-	for(iCluster=0; iCluster<Cluster.Get_Cluster_Count(); iCluster++)
-	{
-		CSG_Table_Record	&Record	= *Statistics.Add_Record();
-
-		Record.Set_Value(0, iCluster + 1);
-		Record.Set_Value(1, Cluster.Get_Cluster_Count (iCluster));
-		Record.Set_Value(2, Cluster.Get_Cluster_StdDev(iCluster));
-
-		for(iFeature=0; iFeature<pFeatures->Get_Count(); iFeature++)
-		{
-			double	Mean	= Cluster.Get_Cluster_Mean  (iCluster, iFeature);
-			double	Stdv	= Cluster.Get_Cluster_StdDev(iCluster, iFeature);
-
-			if( bNormalize )
-			{
-				Mean	= Mean * pFeatures->asGrid(iFeature)->Get_StdDev() + pFeatures->asGrid(iFeature)->Get_Mean();
-				Stdv	= Stdv * pFeatures->asGrid(iFeature)->Get_StdDev();
-			}
-
-			Record.Set_Value(3 + 2 * iFeature + 0, Mean);
-			Record.Set_Value(3 + 2 * iFeature + 1, Stdv);
-		}
-	}
-
-	//-----------------------------------------------------
-	CSG_Parameter	*pLUT	= DataObject_Get_Parameter(pCluster, "LUT");
-
-	if( pLUT && pLUT->asTable() )
-	{
-		bool	bRGB	= pFeatures->Get_Count() >= 3 && Parameters("RGB_COLORS")->asBool();
-
-		for(iCluster=0; iCluster<Statistics.Get_Count(); iCluster++)
-		{
-			CSG_Table_Record	*pClass	= pLUT->asTable()->Get_Record(iCluster);
-
-			if( !pClass )
-			{
-				(pClass	= pLUT->asTable()->Add_Record())->Set_Value(0, SG_Color_Get_Random());
-			}
-
-			pClass->Set_Value(1, CSG_String::Format("%s %d", _TL("Cluster"), iCluster + 1));
-			pClass->Set_Value(2, "");
-			pClass->Set_Value(3, iCluster + 1);
-			pClass->Set_Value(4, iCluster + 1);
-
-			if( bRGB )
-			{
-				#define SET_COLOR_COMPONENT(c, i)	c = (int)(127 + (Statistics[iCluster].asDouble(3 + 2 * i) - pFeatures->asGrid(i)->Get_Mean()) * 127 / pFeatures->asGrid(i)->Get_StdDev()); if( c < 0 ) c = 0; else if( c > 255 ) c = 255;
-
-				int	r; SET_COLOR_COMPONENT(r, 2);
-				int	g; SET_COLOR_COMPONENT(g, 1);
-				int	b; SET_COLOR_COMPONENT(b, 0);
-
-				pClass->Set_Value(0, SG_GET_RGB(r, g, b));
-			}
-		}
-
-		pLUT->asTable()->Set_Record_Count(Statistics.Get_Count());
-
-		DataObject_Set_Parameter(pCluster, pLUT);
-		DataObject_Set_Parameter(pCluster, "COLORS_TYPE", 1);	// Color Classification Type: Lookup Table
-	}
-
-	//-----------------------------------------------------
-	return( true );
-}
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
diff --git a/src/modules/imagery/imagery_classification/cluster_isodata.h b/src/modules/imagery/imagery_classification/cluster_isodata.h
deleted file mode 100755
index 05215a8..0000000
--- a/src/modules/imagery/imagery_classification/cluster_isodata.h
+++ /dev/null
@@ -1,147 +0,0 @@
-
-////////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                imagery_classification                 //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                  cluster_isodata.cpp                  //
-//                                                       //
-//                 Copyright (C) 2016 by                 //
-//                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA is distributed in the hope that it will be       //
-// useful, but WITHOUT ANY WARRANTY; without even the    //
-// implied warranty of MERCHANTABILITY or FITNESS FOR A  //
-// PARTICULAR PURPOSE. See the GNU General Public        //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU General    //
-// Public License along with this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//    e-mail:     oconrad at saga-gis.org                   //
-//                                                       //
-//    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__cluster_isodata_H
-#define HEADER_INCLUDED__cluster_isodata_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <saga_api/saga_api.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CCluster_ISODATA
-{
-public:
-	CCluster_ISODATA(void);
-	CCluster_ISODATA(size_t nFeatures, TSG_Data_Type Data_Type);
-
-	virtual ~CCluster_ISODATA(void);
-
-	bool					Create					(size_t nFeatures, TSG_Data_Type Data_Type);
-	bool					Destroy					(void);
-
-	size_t					Get_Feature_Count		(void)	{	return( m_nFeatures );	}
-
-	size_t					Get_Sample_Count		(void)	{	return( m_Data.Get_Size() );	}
-	bool					Add_Sample				(const double *Sample);
-
-	size_t					Get_Cluster_Count		(void)	{	return( m_nCluster );	}
-	size_t					Get_Cluster_Count		(size_t iCluster)					{	return( cl_m[iCluster]           );	}
-	double					Get_Cluster_StdDev		(size_t iCluster)					{	return( cl_d[iCluster]           );	}
-	double					Get_Cluster_Mean		(size_t iCluster, size_t iFeature)	{	return( cl_c[iCluster][iFeature] );	}
-	double					Get_Cluster_StdDev		(size_t iCluster, size_t iFeature)	{	return( cl_s[iCluster][iFeature] );	}
-
-	size_t					Get_Cluster				(size_t iSample)	{	return( iSample < Get_Sample_Count() ? data_cl[iSample] : m_nCluster );	}
-
-	bool					Set_Max_Iterations		(size_t Value);
-	bool					Set_Max_Clusters		(size_t Value);
-	bool					Set_Ini_Clusters		(size_t Value);
-	bool					Set_Min_Samples			(size_t Value);
-	bool					Set_Max_Distance		(double Value);
-	bool					Set_Max_StdDev			(double Value);
-
-	bool					Run						(void);
-
-
-private:
-
-	size_t					m_maxIterations, m_nFeatures, m_nCluster, m_nCluster_Ini, m_nCluster_Max, m_nSamples_Min;
-
-	double					m_Distance, m_Distance_Max, m_StdDev_Max;
-
-	TSG_Data_Type			m_Data_Type;
-
-	CSG_Array				m_Data;
-
-	CSG_Array_Int			cl_m, cl_msc, data_cl;
-
-	CSG_Vector				cl_d, cl_ms, data_d;
-
-	CSG_Matrix				cl_c, cl_s;
-
-
-	void					_On_Construction		(void);
-
-	bool					_Initialize				(void);
-
-	double					_Get_Sample				(size_t iSample, size_t iFeature);
-
-	double					_Get_Sample_Distance	(int iSample , int iCluster);
-	double					_Get_Cluster_Distance	(int iCluster, int jCluster);
-
-};
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__cluster_isodata_H
diff --git a/src/modules/io/io_esri_e00/e00compr/e00read.c b/src/modules/io/io_esri_e00/e00compr/e00read.c
index 444605e..607f84c 100755
--- a/src/modules/io/io_esri_e00/e00compr/e00read.c
+++ b/src/modules/io/io_esri_e00/e00compr/e00read.c
@@ -247,7 +247,7 @@ void    E00ReadClose(E00ReadPtr psInfo)
 /**********************************************************************
  *                          E00ReadRewind()
  *
- * Rewind the E00ReadPtr.  Allows to start another read pass on the 
+ * Rewind the E00ReadPtr.  Allows starting another read pass on the 
  * input file.
  **********************************************************************/
 void    E00ReadRewind(E00ReadPtr psInfo)
diff --git a/src/modules/io/io_gdal/ogr_import.cpp b/src/modules/io/io_gdal/ogr_import.cpp
index 0708eff..d74e595 100755
--- a/src/modules/io/io_gdal/ogr_import.cpp
+++ b/src/modules/io/io_gdal/ogr_import.cpp
@@ -187,10 +187,20 @@ bool COGR_Import::On_Execute(void)
 				{
 					Parameters("SHAPES")->asShapesList()->Add_Item(pShapes);
 
+					CSG_String	Name	= pShapes->Get_Name();
+
 					pShapes->Get_MetaData().Add_Child("GDAL_DRIVER", DataSource.Get_DriverID());
 					pShapes->Set_File_Name(Files[iFile]);
-					pShapes->Set_Name(SG_File_Get_Name(Files[iFile], false) + (DataSource.Get_Count() == 1 ? CSG_String("") : CSG_String::Format(" [%d]", 1 + iLayer)));
 					pShapes->Set_Description(DataSource.Get_Description(iLayer));
+
+					if( Name.is_Empty() )
+					{
+						pShapes->Set_Name(SG_File_Get_Name(Files[iFile], false) + (DataSource.Get_Count() == 1 ? CSG_String("") : CSG_String::Format(" [%d]", 1 + iLayer)));
+					}
+					else
+					{
+						pShapes->Set_Name(Name);
+					}
 				}
 			}
 		}
diff --git a/src/modules/io/io_shapes_dxf/dxf_import.cpp b/src/modules/io/io_shapes_dxf/dxf_import.cpp
index ac14aa0..2175ba8 100755
--- a/src/modules/io/io_shapes_dxf/dxf_import.cpp
+++ b/src/modules/io/io_shapes_dxf/dxf_import.cpp
@@ -63,7 +63,11 @@
 //---------------------------------------------------------
 #include "dxf_import.h"
 
+#ifdef SYSTEM_DXFLIB
+#include <dxflib/dl_dxf.h>
+#else
 #include "./dxflib/dl_dxf.h"
+#endif
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/modules/io/io_shapes_dxf/dxf_import.h b/src/modules/io/io_shapes_dxf/dxf_import.h
index 928cc2d..dc6a9d6 100755
--- a/src/modules/io/io_shapes_dxf/dxf_import.h
+++ b/src/modules/io/io_shapes_dxf/dxf_import.h
@@ -74,7 +74,11 @@
 //---------------------------------------------------------
 #include "MLB_Interface.h"
 
+#ifdef SYSTEM_DXFLIB
+#include <dxflib/dl_creationadapter.h>
+#else
 #include "./dxflib/dl_creationadapter.h"
+#endif
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/modules/table/table_calculus/MLB_Interface.cpp b/src/modules/table/table_calculus/MLB_Interface.cpp
index 6c63d7b..7eed06e 100755
--- a/src/modules/table/table_calculus/MLB_Interface.cpp
+++ b/src/modules/table/table_calculus/MLB_Interface.cpp
@@ -106,6 +106,7 @@ CSG_String Get_Info(int i)
 #include "table_field_analyzer.h"
 #include "table_mRMR.h"
 #include "table_field_statistics.h"
+#include "table_record_statistics.h"
 
 
 //---------------------------------------------------------
@@ -132,6 +133,8 @@ CSG_Module *		Create_Module(int i)
 	case 12:	return( new CTable_mRMR );
 
 	case 15:	return( new CTable_Field_Statistics() );
+	case 16:	return( new CTable_Record_Statistics() );
+	case 17:	return( new CTable_Record_Statistics_Shapes() );
 
 	//-----------------------------------------------------
 	case 19:	return( NULL );
diff --git a/src/modules/table/table_calculus/Makefile.am b/src/modules/table/table_calculus/Makefile.am
index df45a05..034270f 100755
--- a/src/modules/table/table_calculus/Makefile.am
+++ b/src/modules/table/table_calculus/Makefile.am
@@ -21,6 +21,7 @@ table_field_statistics.cpp\
 table_fill_record_gaps.cpp\
 table_mRMR.cpp\
 table_pca.cpp\
+table_record_statistics.cpp\
 table_running_average.cpp\
 Fit.h\
 LMFit.h\
@@ -32,6 +33,7 @@ table_field_statistics.h\
 table_fill_record_gaps.h\
 table_mRMR.h\
 table_pca.h\
+table_record_statistics.h\
 table_running_average.h
 
 libtable_calculus_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
diff --git a/src/modules/table/table_calculus/Makefile.in b/src/modules/table/table_calculus/Makefile.in
index 59f783e..fb4cccf 100644
--- a/src/modules/table/table_calculus/Makefile.in
+++ b/src/modules/table/table_calculus/Makefile.in
@@ -141,7 +141,7 @@ am_libtable_calculus_la_OBJECTS = Fit.lo LMFit.lo MLB_Interface.lo \
 	Table_Calculator.lo table_cluster_analysis.lo \
 	table_field_analyzer.lo table_field_statistics.lo \
 	table_fill_record_gaps.lo table_mRMR.lo table_pca.lo \
-	table_running_average.lo
+	table_record_statistics.lo table_running_average.lo
 libtable_calculus_la_OBJECTS = $(am_libtable_calculus_la_OBJECTS)
 AM_V_lt = $(am__v_lt_ at AM_V@)
 am__v_lt_ = $(am__v_lt_ at AM_DEFAULT_V@)
@@ -404,6 +404,7 @@ table_field_statistics.cpp\
 table_fill_record_gaps.cpp\
 table_mRMR.cpp\
 table_pca.cpp\
+table_record_statistics.cpp\
 table_running_average.cpp\
 Fit.h\
 LMFit.h\
@@ -415,6 +416,7 @@ table_field_statistics.h\
 table_fill_record_gaps.h\
 table_mRMR.h\
 table_pca.h\
+table_record_statistics.h\
 table_running_average.h
 
 libtable_calculus_la_LIBADD = $(top_srcdir)/src/saga_core/saga_api/libsaga_api.la
@@ -506,6 +508,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_fill_record_gaps.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_mRMR.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_pca.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_record_statistics.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/table_running_average.Plo at am__quote@
 
 .cpp.o:
diff --git a/src/modules/table/table_calculus/table_record_statistics.cpp b/src/modules/table/table_calculus/table_record_statistics.cpp
new file mode 100755
index 0000000..febeaf2
--- /dev/null
+++ b/src/modules/table/table_calculus/table_record_statistics.cpp
@@ -0,0 +1,332 @@
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                    table_calculus                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//               table_record_statistics.cpp             //
+//                                                       //
+//                 Copyright (C) 2016 by                 //
+//                      Olaf Conrad                      //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA is distributed in the hope that it will be       //
+// useful, but WITHOUT ANY WARRANTY; without even the    //
+// implied warranty of MERCHANTABILITY or FITNESS FOR A  //
+// PARTICULAR PURPOSE. See the GNU General Public        //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU General    //
+// Public License along with this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 51 Franklin Street, 5th Floor, Boston, MA 02110-1301, //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//    e-mail:     oconrad at saga-gis.org                   //
+//                                                       //
+//    contact:    Olaf Conrad                            //
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include "table_record_statistics.h"
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+enum
+{
+	STATS_MEAN	= 0,
+	STATS_MIN,
+	STATS_MAX,
+	STATS_RANGE,
+	STATS_SUM,
+	STATS_NUM,
+	STATS_VAR,
+	STATS_STDV,
+	STATS_PCTL,
+	STATS_COUNT
+};
+
+//---------------------------------------------------------
+const CSG_String	STATS[STATS_COUNT][2]	=
+{
+	{	"MEAN"  , _TL("Arithmetic Mean"   )	},
+	{	"MIN"   , _TL("Minimum"           )	},
+	{	"MAX"   , _TL("Maximum"           )	},
+	{	"RANGE" , _TL("Range"             )	},
+	{	"SUM"   , _TL("Sum"               )	},
+	{	"NUM"   , _TL("Number of Values"  )	},
+	{	"VAR"   , _TL("Variance"          )	},
+	{	"STDDEV", _TL("Standard Deviation")	},
+	{	"PCTL"  , _TL("Percentile"        )	}
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CTable_Record_Statistics_Base::CTable_Record_Statistics_Base(void)
+{
+	Set_Name		(_TL("Record Statistics"));
+
+	Set_Author		("O.Conrad (c) 2016");
+
+	Set_Description	(_TW(
+		""
+	));
+
+	for(int i=0; i<STATS_COUNT; i++)
+	{
+		Parameters.Add_Bool(NULL, STATS[i][0], STATS[i][1], _TL(""));
+	}
+
+	Parameters.Add_Double(
+		Parameters("PCTL"), "PCTL_VAL", _TL("Value"),
+		_TL(""),
+		50.0, 0.0, true, 100.0, true
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+int CTable_Record_Statistics_Base::On_Parameters_Enable(CSG_Parameters *pParameters, CSG_Parameter *pParameter)
+{
+	if(	!SG_STR_CMP(pParameter->Get_Identifier(), "PCTL") )
+	{
+		pParameters->Get_Parameter("PCTL_VAL")->Set_Enabled(pParameter->asBool());
+	}
+
+	return( CSG_Module::On_Parameters_Enable(pParameters, pParameter) );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+bool CTable_Record_Statistics_Base::On_Execute(void)
+{
+	//-----------------------------------------------------
+	CSG_Table	*pTable	= Parameters("TABLE")->asTable();
+
+	if( !pTable->is_Valid() || pTable->Get_Field_Count() <= 0 || pTable->Get_Record_Count() <= 0 )
+	{
+		Error_Set(_TL("invalid table"));
+
+		return( false );
+	}
+
+	//-----------------------------------------------------
+	CSG_Array_Int	_Fields;
+
+	int	*Fields	= (int *)Parameters("FIELDS")->asPointer();
+	int	nFields	=        Parameters("FIELDS")->asInt    ();
+
+	if( nFields == 0 )
+	{
+		for(int i=0; i<pTable->Get_Field_Count(); i++)
+		{
+			if( SG_Data_Type_is_Numeric(pTable->Get_Field_Type(i)) )
+			{
+				_Fields.Inc_Array(); _Fields[nFields++]	= i;
+			}
+		}
+
+		if( nFields == 0 )
+		{
+			Error_Set(_TL("could not find any numeric attribute field"));
+
+			return( false );
+		}
+
+		Fields	= _Fields.Get_Array();
+	}
+
+	//-----------------------------------------------------
+	if( Parameters("RESULT")->asTable() && Parameters("RESULT")->asTable() != pTable )
+	{
+		pTable	= Parameters("RESULT")->asTable();
+		pTable->Create( *Parameters("TABLE")->asTable());
+		pTable->Set_Name(Parameters("TABLE")->asTable()->Get_Name());
+	}
+
+	//-----------------------------------------------------
+	double	Quantile	= Parameters("PCTL_VAL")->asDouble();
+
+	int	offResult	= pTable->Get_Field_Count();
+
+	bool	bStats[STATS_COUNT];
+
+	{
+		for(int i=0; i<STATS_COUNT; i++)
+		{
+			if( (bStats[i] = Parameters(STATS[i][0])->asBool()) == true )
+			{
+				pTable->Add_Field(STATS[i][1], SG_DATATYPE_Double);
+			}
+		}
+
+		if( pTable->Get_Field_Count() == offResult )
+		{
+			Error_Set(_TL("no statistical measure has been selected"));
+
+			return( false );
+		}
+	}
+
+	//-----------------------------------------------------
+	for(int iRecord=0; iRecord<pTable->Get_Count() && Set_Progress(iRecord, pTable->Get_Count()); iRecord++)
+	{
+		CSG_Table_Record	*pRecord	= pTable->Get_Record(iRecord);
+
+		CSG_Simple_Statistics	s(bStats[STATS_PCTL]);
+
+		for(int iField=0; iField<nFields; iField++)
+		{
+			if( !pRecord->is_NoData(iField) )
+			{
+				s	+= pRecord->asDouble(Fields[iField]);
+			}
+		}
+
+		//-------------------------------------------------
+		int	iField	= offResult;
+
+		if( s.Get_Count() > 0 )
+		{
+			if( bStats[STATS_MEAN ]	)	pRecord->Set_Value(iField++, s.Get_Mean    ());
+			if( bStats[STATS_MIN  ]	)	pRecord->Set_Value(iField++, s.Get_Minimum ());
+			if( bStats[STATS_MAX  ]	)	pRecord->Set_Value(iField++, s.Get_Maximum ());
+			if( bStats[STATS_RANGE]	)	pRecord->Set_Value(iField++, s.Get_Range   ());
+			if( bStats[STATS_SUM  ]	)	pRecord->Set_Value(iField++, s.Get_Sum     ());
+			if( bStats[STATS_NUM  ]	)	pRecord->Set_Value(iField++, s.Get_Count   ());
+			if( bStats[STATS_VAR  ]	)	pRecord->Set_Value(iField++, s.Get_Variance());
+			if( bStats[STATS_STDV ]	)	pRecord->Set_Value(iField++, s.Get_StdDev  ());
+			if( bStats[STATS_PCTL ]	)	pRecord->Set_Value(iField++, s.Get_Quantile(Quantile));
+		}
+		else
+		{
+			for(int i=0; i<STATS_COUNT; i++)
+			{
+				if( bStats[i] )
+				{
+					pRecord->Set_NoData(iField++);
+				}
+			}
+		}
+	}
+
+	//-----------------------------------------------------
+	if( pTable == Parameters("TABLE")->asTable() )
+	{
+		DataObject_Update(pTable);
+	}
+
+	return( true );
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CTable_Record_Statistics::CTable_Record_Statistics(void)
+	: CTable_Record_Statistics_Base()
+{
+	CSG_Parameter	*pNode	= Parameters.Add_Table(
+		NULL	, "TABLE"		, _TL("Table"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Table_Fields(
+		pNode	, "FIELDS"		, _TL("Attributes"),
+		_TL("If no field is selected statistics will be built from all numeric fields.")
+	);
+
+	Parameters.Add_Table(
+		NULL	, "RESULT"		, _TL("Result"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+CTable_Record_Statistics_Shapes::CTable_Record_Statistics_Shapes(void)
+	: CTable_Record_Statistics_Base()
+{
+	Set_Name		(_TL("Record Statistics (Shapes)"));
+
+	CSG_Parameter	*pNode	= Parameters.Add_Shapes(
+		NULL	, "TABLE"		, _TL("Table"),
+		_TL(""),
+		PARAMETER_INPUT
+	);
+
+	Parameters.Add_Table_Fields(
+		pNode	, "FIELDS"		, _TL("Attributes"),
+		_TL("If no field is selected statistics will be built from all numeric fields.")
+	);
+
+	Parameters.Add_Shapes(
+		NULL	, "RESULT"		, _TL("Result"),
+		_TL(""),
+		PARAMETER_OUTPUT_OPTIONAL
+	);
+}
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/imagery/imagery_classification/classify_isocluster.h b/src/modules/table/table_calculus/table_record_statistics.h
similarity index 77%
rename from src/modules/imagery/imagery_classification/classify_isocluster.h
rename to src/modules/table/table_calculus/table_record_statistics.h
index 8ce9f48..8e77977 100755
--- a/src/modules/imagery/imagery_classification/classify_isocluster.h
+++ b/src/modules/table/table_calculus/table_record_statistics.h
@@ -1,105 +1,117 @@
-
-////////////////////////////////////////////////////////////
-//                                                       //
-//                         SAGA                          //
-//                                                       //
-//      System for Automated Geoscientific Analyses      //
-//                                                       //
-//                    Module Library:                    //
-//                imagery_classification                 //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-//                 classify_isocluster.cpp               //
-//                                                       //
-//                 Copyright (C) 2016 by                 //
+
+///////////////////////////////////////////////////////////
+//                                                       //
+//                         SAGA                          //
+//                                                       //
+//      System for Automated Geoscientific Analyses      //
+//                                                       //
+//                    Module Library:                    //
+//                    table_calculus                     //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+//               table_record_statistics.h               //
+//                                                       //
+//                 Copyright (C) 2016 by                 //
 //                      Olaf Conrad                      //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
-// This file is part of 'SAGA - System for Automated     //
-// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
-//                                                       //
-// SAGA is distributed in the hope that it will be       //
-// useful, but WITHOUT ANY WARRANTY; without even the    //
-// implied warranty of MERCHANTABILITY or FITNESS FOR A  //
-// PARTICULAR PURPOSE. See the GNU General Public        //
-// License for more details.                             //
-//                                                       //
-// You should have received a copy of the GNU General    //
-// Public License along with this program; if not,       //
-// write to the Free Software Foundation, Inc.,          //
-// 59 Temple Place - Suite 330, Boston, MA 02111-1307,   //
-// USA.                                                  //
-//                                                       //
-//-------------------------------------------------------//
-//                                                       //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
+// This file is part of 'SAGA - System for Automated     //
+// Geoscientific Analyses'. SAGA 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; version 2 of the License.   //
+//                                                       //
+// SAGA is distributed in the hope that it will be       //
+// useful, but WITHOUT ANY WARRANTY; without even the    //
+// implied warranty of MERCHANTABILITY or FITNESS FOR A  //
+// PARTICULAR PURPOSE. See the GNU General Public        //
+// License for more details.                             //
+//                                                       //
+// You should have received a copy of the GNU General    //
+// Public License along with this program; if not,       //
+// write to the Free Software Foundation, Inc.,          //
+// 51 Franklin Street, 5th Floor, Boston, MA 02110-1301, //
+// USA.                                                  //
+//                                                       //
+//-------------------------------------------------------//
+//                                                       //
 //    e-mail:     oconrad at saga-gis.org                   //
 //                                                       //
 //    contact:    Olaf Conrad                            //
-//                Institute of Geography                 //
-//                University of Hamburg                  //
-//                Germany                                //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#ifndef HEADER_INCLUDED__classify_isocluster_H
-#define HEADER_INCLUDED__classify_isocluster_H
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#include <saga_api/saga_api.h>
-
-
-///////////////////////////////////////////////////////////
-//														 //
-//														 //
-//														 //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-class CGrid_Cluster_ISODATA : public CSG_Module_Grid
-{
-public:
-	CGrid_Cluster_ISODATA(void);
-
-	virtual CSG_String		Get_MenuPath			(void)	{	return( _TL("Unsupervised") );	}
-
-
-protected:
-
-	virtual int				On_Parameter_Changed	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
-	virtual int				On_Parameters_Enable	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
-
-	virtual bool			On_Execute				(void);
-
-
-private:
-
-};
-
-
-///////////////////////////////////////////////////////////
-//                                                       //
-//                                                       //
-//                                                       //
-///////////////////////////////////////////////////////////
-
-//---------------------------------------------------------
-#endif // #ifndef HEADER_INCLUDED__classify_isocluster_H
+//                Institute of Geography                 //
+//                University of Hamburg                  //
+//                Germany                                //
+//                                                       //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+#include <saga_api/saga_api.h>
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CTable_Record_Statistics_Base : public CSG_Module  
+{
+public:
+	CTable_Record_Statistics_Base(void);
+
+
+protected:
+
+	int						On_Parameters_Enable	(CSG_Parameters *pParameters, CSG_Parameter *pParameter);
+
+	virtual bool			On_Execute				(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CTable_Record_Statistics : public CTable_Record_Statistics_Base  
+{
+public:
+	CTable_Record_Statistics(void);
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
+class CTable_Record_Statistics_Shapes : public CTable_Record_Statistics_Base  
+{
+public:
+	CTable_Record_Statistics_Shapes(void);
+
+	virtual CSG_String		Get_MenuPath		(void)	{	return( _TL("A:Shapes|Table") );	}
+
+};
+
+
+///////////////////////////////////////////////////////////
+//														 //
+//														 //
+//														 //
+///////////////////////////////////////////////////////////
+
+//---------------------------------------------------------
diff --git a/src/modules/table/table_tools/table_field_deletion.cpp b/src/modules/table/table_tools/table_field_deletion.cpp
index e3d6ee7..6b032d9 100755
--- a/src/modules/table/table_tools/table_field_deletion.cpp
+++ b/src/modules/table/table_tools/table_field_deletion.cpp
@@ -138,9 +138,10 @@ int CTable_Field_Deletion::On_Parameters_Enable(CSG_Parameters *pParameters, CSG
 bool CTable_Field_Deletion::On_Execute(void)
 {
 	//-----------------------------------------------------
-	CSG_Parameter_Table_Fields	*pFields	= Parameters("FIELDS")->asTableFields();
+	int	*Fields	= (int *)Parameters("FIELDS")->asPointer();
+	int	nFields	=        Parameters("FIELDS")->asInt    ();
 
-	if( pFields->Get_Count() <= 0 )
+	if( nFields <= 0 )
 	{
 		Error_Set(_TL("no fields in selection"));
 
@@ -148,106 +149,80 @@ bool CTable_Field_Deletion::On_Execute(void)
 	}
 
 	//-----------------------------------------------------
-	CSG_Table	*pTable  = Parameters("TABLE")->asTable();
-
+	CSG_Table	*pInput  = Parameters("TABLE")->asTable();
 	CSG_Table	*pOutput = NULL;
 
-	if( pTable->Get_ObjectType() == DATAOBJECT_TYPE_Shapes )
+	if( pInput->Get_ObjectType() == DATAOBJECT_TYPE_Shapes )
 	{
-		if( (pOutput = Parameters("OUT_SHAPES")->asShapes()) != NULL && pOutput != pTable )
+		if( (pOutput = Parameters("OUT_SHAPES")->asShapes()) != NULL && pOutput != pInput )
 		{
-			((CSG_Shapes *)pOutput)->Create(((CSG_Shapes *)pTable)->Get_Type(), (const wchar_t*)0, (CSG_Table *)0, ((CSG_Shapes *)pTable)->Get_Vertex_Type());
+			((CSG_Shapes *)pOutput)->Create(((CSG_Shapes *)pInput)->Get_Type(), (const wchar_t*)0, (CSG_Table *)0, ((CSG_Shapes *)pInput)->Get_Vertex_Type());
 		}
 	}
-	else // if( pTable->Get_ObjectType() == DATAOBJECT_TYPE_Table )
+	else // if( pInput->Get_ObjectType() == DATAOBJECT_TYPE_Table )
 	{
-		if( (pOutput = Parameters("OUT_TABLE"  )->asTable()) != NULL && pOutput != pTable )
+		if( (pOutput = Parameters("OUT_TABLE" )->asTable()) != NULL && pOutput != pInput )
 		{
 			pOutput->Destroy();
 		}
 	}
 
 	//-----------------------------------------------------
-	if( pOutput )
+	if( pOutput == NULL || pOutput == pInput )
 	{
-		int		nFields		= pTable->Get_Field_Count() - pFields->Get_Count();
-		int		*pFieldsOut	= new int[nFields];
+		for(int iField=nFields-1; iField>=0; iField--)
+		{
+			pInput->Del_Field(Fields[iField]);
+		}
 
-		int		iField = 0;
+		DataObject_Update(pInput);
+	}
 
-		for(int i=0; i<pTable->Get_Field_Count(); i++)
-		{
-			bool bDelete = false;
+	//-----------------------------------------------------
+	else
+	{
+		bool	*bDelete	= (bool *)SG_Calloc(pInput->Get_Field_Count(), sizeof(bool));
 
-			for(int j=0; j<pFields->Get_Count(); j++)
-			{
-				if( i == pFields->Get_Index(j) )
-				{
-					bDelete = true;
-					break;
-				}
-			}
+		int		i, j;
 
-			if( !bDelete )
-			{
-				pFieldsOut[iField] = i;
-				iField++;
-			}
+		for(i=0; i<nFields; i++)
+		{
+			bDelete[Fields[i]]	= true;
 		}
 
+		pOutput->Set_Name(CSG_String::Format("%s [%s]", pInput->Get_Name(), _TL("Changed")));
 
-		pOutput->Set_Name(CSG_String::Format(SG_T("%s [%s]"), pTable->Get_Name(), _TL("Changed")));
-
-		for(iField=0; iField<nFields; iField++)
+		for(i=0; i<pInput->Get_Field_Count(); i++)
 		{
-			pOutput->Add_Field(pTable->Get_Field_Name(pFieldsOut[iField]), pTable->Get_Field_Type(pFieldsOut[iField]));
+			if( !bDelete[i] )
+			{
+				pOutput->Add_Field(pInput->Get_Field_Name(i), pInput->Get_Field_Type(i));
+			}
 		}
 
-		for(int iRecord=0; iRecord<pTable->Get_Count(); iRecord++)
+		for(int iRecord=0; iRecord<pInput->Get_Count() && Set_Progress(iRecord, pInput->Get_Count()); iRecord++)
 		{
-			CSG_Table_Record	*pOut, *pIn	= pTable->Get_Record(iRecord);
+			CSG_Table_Record	*pOut, *pIn	= pInput->Get_Record(iRecord);
 
 			if( pOutput->Get_ObjectType() == DATAOBJECT_TYPE_Shapes )
 			{
 				pOut	= ((CSG_Shapes *)pOutput)->Add_Shape(pIn, SHAPE_COPY_GEOM);
-
-				if( ((CSG_Shapes *)pOutput)->Get_Vertex_Type() > SG_VERTEX_TYPE_XY )
-				{
-					for(int iPart=0; iPart<((CSG_Shape *)pIn)->Get_Part_Count(); iPart++)
-					{
-						for(int iPoint=0; iPoint<((CSG_Shape *)pIn)->Get_Point_Count(iPart); iPoint++)
-						{
-							((CSG_Shape *)pOut)->Set_Z(((CSG_Shape *)pIn)->Get_Z(iPoint, iPart), iPoint, iPart);
-
-							if( ((CSG_Shapes *)pOutput)->Get_Vertex_Type() == SG_VERTEX_TYPE_XYZM )
-							{
-								((CSG_Shape *)pOut)->Set_M(((CSG_Shape *)pIn)->Get_M(iPoint, iPart), iPoint, iPart);
-							}
-						}
-					}
-				}
 			}
 			else
 			{
 				pOut	= pOutput->Add_Record();
 			}
 
-			for(iField=0; iField<nFields; iField++)
+			for(i=0, j=0; i<pInput->Get_Field_Count(); i++)
 			{
-				*pOut->Get_Value(iField)	= *pIn->Get_Value(pFieldsOut[iField]);
+				if( !bDelete[i] )
+				{
+					*pOut->Get_Value(j++)	= *pIn->Get_Value(i);
+				}
 			}
 		}
 
-		delete[] pFieldsOut;
-	}
-	else
-	{
-		for(int iField=pFields->Get_Count()-1; iField>=0; iField--)
-		{
-			pTable->Del_Field(pFields->Get_Index(pFields->Get_Index(iField)));
-		}
-
-		DataObject_Update(pTable);
+		SG_Free(bDelete);
 	}
 
 	//-----------------------------------------------------
diff --git a/src/saga_core/saga_api/saga_api.h b/src/saga_core/saga_api/saga_api.h
index 829af6c..c9cd84b 100755
--- a/src/saga_core/saga_api/saga_api.h
+++ b/src/saga_core/saga_api/saga_api.h
@@ -128,8 +128,8 @@
 //---------------------------------------------------------
 #define SAGA_MAJOR_VERSION		2
 #define SAGA_MINOR_VERSION		3
-#define SAGA_RELEASE_NUMBER		0
-#define SAGA_VERSION			SG_T("2.3.0")
+#define SAGA_RELEASE_NUMBER		1
+#define SAGA_VERSION			SG_T("2.3.1")
 
 
 ///////////////////////////////////////////////////////////
diff --git a/src/saga_core/saga_gui/res/saga.bra.txt b/src/saga_core/saga_gui/res/saga.bra.txt
index 4632483..189146a 100644
--- a/src/saga_core/saga_gui/res/saga.bra.txt
+++ b/src/saga_core/saga_gui/res/saga.bra.txt
@@ -2242,7 +2242,9 @@ TEXT	TRANSLATION
 "IHS to RGB"	"IHS para RGB"
 "IMCORR - Feature Tracking"	"IMCORR - Rastreamento de fei��o"
 "ISODATA Cluster Statistics"	"Estat�sticas de cluster ISODATA"
+"ISODATA Clustering"	""
 "ISODATA Clustering for Grids"	"Clusteriza��o ISODATA para grades"
+"ISODATA Clustering tools"	""
 "Ice"	"Gelo"
 "Identifier"	"Identificador"
 "Identity"	"Identidade"
@@ -2254,6 +2256,7 @@ TEXT	TRANSLATION
 "If checked, then temperature data are used."	"Se marcada, em seguida, s�o utilizados dados de temperatura."
 "If false, the training algorithm normalizes each input feature independently, shifting its mean value to 0 and making the standard deviation equal to 1."	"Se for falso, o algoritmo de treino normaliza a fun��o de entrada de cada elemento independentemente, mudando o seu valor m�dio para 0 e fazendo com que o desvio padr�o seja igual a 1."
 "If false, the training algorithm normalizes each output feature independently, by transforming it to the certain range depending on the used activation function."	"Se falso, o algoritmo de treinamento normaliza cada fei�ao de sa�da de forma independente, transformando-a ao certo intervalo, dependendo da fun��o de ativa��o utilizada."
+"If no field is selected statistics will be built from all numeric fields."	""
 "If not set points will be removed from the input data set."	"Se n�o setar pontos de ajuste, ser� removido a partir do conjunto de dados de entrada."
 "If not set property attributes will be added to the orignal layer."	"Se n�o definir os atributos de propriedade ser� adicionado � camada original."
 "If not specified the cache will be created in the current user's temporary directory."	"Se n�o for especificado, o cache ser� criado no diret�rio tempor�rio do usu�rio atual."
@@ -4038,6 +4041,8 @@ TEXT	TRANSLATION
 "Reclassify|Extract Subset|"	"Reclassificar|Extrair subconjunto|"
 "Recognised Files"	"Arquivos Reconhecidos"
 "Reconstruction result"	"Resultado da Reconstru��o"
+"Record Statistics"	""
+"Record Statistics (Shapes)"	""
 "Rectangles"	"Ret�ngulos"
 "Rectify Grid"	"Retificar grade"
 "Red"	"Vermelho"
@@ -6087,6 +6092,7 @@ TEXT	TRANSLATION
 "could not drop PostgreSQL database"	"n�o foi poss�vel deixar desconectar do banco de dados PostgreSQL"
 "could not execute module"	"n�o foi poss�vel executar o m�dulo"
 "could not execute tool"	"n�o foi poss�vel executar a ferramenta"
+"could not find any numeric attribute field"	""
 "could not find module"	"N�o conseguimos encontrar o m�dulo"
 "could not find tool"	"N�o conseguimos encontrar a ferramenta"
 "could not import random forest"	"n�o foi poss�vel importar a floresta aleat�ria"
@@ -6666,6 +6672,7 @@ TEXT	TRANSLATION
 "no sinks"	"n�o skins"
 "no spatial intersection between grid(s) and points layer"	"n�o h� interse��o espacial entre a grade(s) e os pontos da camada"
 "no spatial intersection between grid(s) and polygon layer"	"n�o h� interse��o espacial entre a grade(s) e a camada de pol�gono"
+"no statistical measure has been selected"	""
 "no target specified"	"sem destino especificado"
 "no target variable in selection"	"nenhuma vari�vel alvo na sele��o"
 "no training areas could be analysed."	"�reas de forma��o poderiam ser analisadas."
diff --git a/src/saga_core/saga_gui/res/saga.ger.txt b/src/saga_core/saga_gui/res/saga.ger.txt
index 00f6108..73a9c59 100644
--- a/src/saga_core/saga_gui/res/saga.ger.txt
+++ b/src/saga_core/saga_gui/res/saga.ger.txt
@@ -2242,7 +2242,9 @@ TEXT	TRANSLATION
 "IHS to RGB"	""
 "IMCORR - Feature Tracking"	""
 "ISODATA Cluster Statistics"	""
+"ISODATA Clustering"	""
 "ISODATA Clustering for Grids"	""
+"ISODATA Clustering tools"	""
 "Ice"	"Eis"
 "Identifier"	"Bezeichner"
 "Identity"	""
@@ -2254,6 +2256,7 @@ TEXT	TRANSLATION
 "If checked, then temperature data are used."	"Wenn abgehakt werden die Temperaturdaten benutzt."
 "If false, the training algorithm normalizes each input feature independently, shifting its mean value to 0 and making the standard deviation equal to 1."	""
 "If false, the training algorithm normalizes each output feature independently, by transforming it to the certain range depending on the used activation function."	""
+"If no field is selected statistics will be built from all numeric fields."	""
 "If not set points will be removed from the input data set."	""
 "If not set property attributes will be added to the orignal layer."	""
 "If not specified the cache will be created in the current user's temporary directory."	""
@@ -4038,6 +4041,8 @@ TEXT	TRANSLATION
 "Reclassify|Extract Subset|"	"Reklassifizieren|Extrakt Teilmenge|"
 "Recognised Files"	""
 "Reconstruction result"	""
+"Record Statistics"	""
+"Record Statistics (Shapes)"	""
 "Rectangles"	""
 "Rectify Grid"	""
 "Red"	"Rot"
@@ -6087,6 +6092,7 @@ TEXT	TRANSLATION
 "could not drop PostgreSQL database"	""
 "could not execute module"	"Werkzeug konnte nicht ausgef�hrt werden"
 "could not execute tool"	"Werkzeug konnte nicht ausgef�hrt werden"
+"could not find any numeric attribute field"	""
 "could not find module"	"Werkzeug konnte nicht lokalisiert werden"
 "could not find tool"	"Werkzeug konnte nicht lokalisiert werden"
 "could not import random forest"	""
@@ -6666,6 +6672,7 @@ TEXT	TRANSLATION
 "no sinks"	"keine Senken"
 "no spatial intersection between grid(s) and points layer"	""
 "no spatial intersection between grid(s) and polygon layer"	"keine r�umliche �berschneidung zwischen Raster(n) und Polygonebenen"
+"no statistical measure has been selected"	""
 "no target specified"	"kein Ziel ausgew�hlt"
 "no target variable in selection"	""
 "no training areas could be analysed."	""
diff --git a/src/saga_core/saga_gui/res/saga.lng.txt b/src/saga_core/saga_gui/res/saga.lng.txt
index e125367..455a86e 100644
--- a/src/saga_core/saga_gui/res/saga.lng.txt
+++ b/src/saga_core/saga_gui/res/saga.lng.txt
@@ -2242,7 +2242,9 @@ TEXT	TRANSLATION
 "IHS to RGB"	""
 "IMCORR - Feature Tracking"	""
 "ISODATA Cluster Statistics"	""
+"ISODATA Clustering"	""
 "ISODATA Clustering for Grids"	""
+"ISODATA Clustering tools"	""
 "Ice"	""
 "Identifier"	""
 "Identity"	""
@@ -2254,6 +2256,7 @@ TEXT	TRANSLATION
 "If checked, then temperature data are used."	""
 "If false, the training algorithm normalizes each input feature independently, shifting its mean value to 0 and making the standard deviation equal to 1."	""
 "If false, the training algorithm normalizes each output feature independently, by transforming it to the certain range depending on the used activation function."	""
+"If no field is selected statistics will be built from all numeric fields."	""
 "If not set points will be removed from the input data set."	""
 "If not set property attributes will be added to the orignal layer."	""
 "If not specified the cache will be created in the current user's temporary directory."	""
@@ -4038,6 +4041,8 @@ TEXT	TRANSLATION
 "Reclassify|Extract Subset|"	""
 "Recognised Files"	""
 "Reconstruction result"	""
+"Record Statistics"	""
+"Record Statistics (Shapes)"	""
 "Rectangles"	""
 "Rectify Grid"	""
 "Red"	""
@@ -6087,6 +6092,7 @@ TEXT	TRANSLATION
 "could not drop PostgreSQL database"	""
 "could not execute module"	""
 "could not execute tool"	""
+"could not find any numeric attribute field"	""
 "could not find module"	""
 "could not find tool"	""
 "could not import random forest"	""
@@ -6666,6 +6672,7 @@ TEXT	TRANSLATION
 "no sinks"	""
 "no spatial intersection between grid(s) and points layer"	""
 "no spatial intersection between grid(s) and polygon layer"	""
+"no statistical measure has been selected"	""
 "no target specified"	""
 "no target variable in selection"	""
 "no training areas could be analysed."	""
diff --git a/src/scripting/helper/make_saga_release.bat b/src/scripting/helper/make_saga_release.bat
index 6e807ab..81524a2 100755
--- a/src/scripting/helper/make_saga_release.bat
+++ b/src/scripting/helper/make_saga_release.bat
@@ -3,7 +3,7 @@
 REM ___________________________________
 SET SAGA_VER_MAJOR=2
 SET SAGA_VER_MINOR=3
-SET SAGA_VER_RELEASE=0
+SET SAGA_VER_RELEASE=1
 
 SET SAGA_VERSION=saga_%SAGA_VER_MAJOR%.%SAGA_VER_MINOR%.%SAGA_VER_RELEASE%
 SET TEXT_VERSION=%SAGA_VER_MAJOR%-%SAGA_VER_MINOR%-%SAGA_VER_RELEASE%
diff --git a/src/scripting/python/helpers/saga_cmd_param_interface/tools.py b/src/scripting/python/helpers/saga_cmd_param_interface/tools.py
index 4f6393e..61d42ba 100755
--- a/src/scripting/python/helpers/saga_cmd_param_interface/tools.py
+++ b/src/scripting/python/helpers/saga_cmd_param_interface/tools.py
@@ -662,5 +662,8 @@ tools = [
 ['imagery_opencv', 11, 'Artificial Neural Network Classification (OpenCV)'],
 ['io_shapes', 21, 'Import Building Sketches from CityGML'],
 ['statistics_grid', 14, 'Categorical Coincidence'],
-['ta_hydrology', 27, 'Maximum Flow Path Length']
+['ta_hydrology', 27, 'Maximum Flow Path Length'],
+['imagery_isocluster', 0, 'ISODATA Clustering for Grids'],
+['table_calculus', 16, 'Record Statistics'],
+['table_calculus', 17, 'Record Statistics']
 ]

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/saga.git



More information about the Pkg-grass-devel mailing list