[GRASS-SVN] r69891 - in grass-addons/grass7: raster/r.object.geometry raster/r.randomforest vector/v.faultdirections vector/v.in.survey

svn_grass at osgeo.org svn_grass at osgeo.org
Thu Nov 24 02:04:02 PST 2016


Author: neteler
Date: 2016-11-24 02:04:02 -0800 (Thu, 24 Nov 2016)
New Revision: 69891

Modified:
   grass-addons/grass7/raster/r.object.geometry/main.c
   grass-addons/grass7/raster/r.randomforest/ml_classifiers.py
   grass-addons/grass7/raster/r.randomforest/ml_utils.py
   grass-addons/grass7/vector/v.faultdirections/v.faultdirections.html
   grass-addons/grass7/vector/v.in.survey/Makefile
   grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
   grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
   grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
   grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
   grass-addons/grass7/vector/v.in.survey/v.in.survey.py
Log:
addons: svn propset

Modified: grass-addons/grass7/raster/r.object.geometry/main.c
===================================================================
--- grass-addons/grass7/raster/r.object.geometry/main.c	2016-11-24 09:57:15 UTC (rev 69890)
+++ grass-addons/grass7/raster/r.object.geometry/main.c	2016-11-24 10:04:02 UTC (rev 69891)
@@ -1,336 +1,336 @@
-
-/****************************************************************************
- *
- * MODULE:       r.object.geometry
- *
- * AUTHOR(S):    Moritz Lennert
- *               Markus Metz
- *
- * PURPOSE:      Fetch object geometry parameters.
- *
- * COPYRIGHT:    (C) 2016 by the GRASS Development Team
- *
- *               This program is free software under the GNU General Public
- *               License (>=v2). Read the file COPYING that comes with GRASS
- *               for details.
- *
- ***************************************************************************/
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <math.h>
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include <grass/glocale.h>
-
-/* compare two cell values
- * return 0 if equal, 1 if different */
-static int cmp_cells(CELL a, CELL b, int a_null, int b_null)
-{
-    return (a_null + b_null == 1 || (a_null + b_null == 0 && a != b));
-}
-
-int main(int argc, char *argv[])
-{
-    int row, col, nrows, ncols;
-
-    struct Range range;
-    CELL min, max;
-    int in_fd;
-    int i;
-    struct GModule *module;
-    struct Option *opt_in;
-    struct Option *opt_out;
-    struct Option *opt_sep;
-    struct Flag *flag_m;
-    char *sep;
-    FILE *out_fp;
-    CELL *prev_in, *cur_in, *temp_in;
-    CELL cur, top, left;
-    int cur_null, top_null, left_null;
-    int len;
-    struct obj_geo 
-    {
-	double area, perimeter;
-	int min_row, max_row, min_col, max_col; /* bounding box */
-    } *obj_geos;
-    double unit_area;
-    int n_objects;
-    int planimetric, compute_areas;
-    struct Cell_head cellhd;
-    double ew_factor;
-
-    G_gisinit(argv[0]);
-
-    /* Define the different options */
-
-    module = G_define_module();
-    G_add_keyword(_("raster"));
-    G_add_keyword(_("statistics"));
-    G_add_keyword(_("reclass"));
-    G_add_keyword(_("clumps"));
-    module->description =
-	_("Calculates geometry parameters for raster objects.");
-
-    opt_in = G_define_standard_option(G_OPT_R_INPUT);
-
-    opt_out = G_define_standard_option(G_OPT_F_OUTPUT);
-    opt_out->required = NO;
-
-    opt_sep = G_define_standard_option(G_OPT_F_SEP);
-
-    flag_m = G_define_flag();
-    flag_m->key = 'm';
-    flag_m->label = _("Use meters as units instead of cells");
-
-    /* parse options */
-    if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
-
-    sep = G_option_to_separator(opt_sep);
-    in_fd = Rast_open_old(opt_in->answer, "");
-
-    if (Rast_get_map_type(in_fd) != CELL_TYPE)
-	G_fatal_error(_("Input raster mus be of type CELL"));
-
-    if (opt_out->answer != NULL && strcmp(opt_out->answer, "-") != 0) {
-        if(! (out_fp = fopen(opt_out->answer, "w")))
-            G_fatal_error(_("Unable to open file <%s> for writing"), opt_out->answer);
-    } else {
-    	out_fp = stdout;
-    }
-
-    Rast_get_window(&cellhd);
-    nrows = cellhd.rows;
-    ncols = cellhd.cols;
-    /* for unit = cells */
-    ew_factor = cellhd.ew_res / cellhd.ns_res;
-
-    /* allocate CELL buffers two columns larger than current window */
-    len = (ncols + 2) * sizeof(CELL);
-    prev_in = (CELL *) G_malloc(len);
-    cur_in = (CELL *) G_malloc(len);
-
-    /* fake a previous row which is all NULL */
-    Rast_set_c_null_value(prev_in, ncols + 2);
-
-    /* set left and right edge to NULL */
-    Rast_set_c_null_value(&cur_in[0], 1);
-    Rast_set_c_null_value(&cur_in[ncols + 1], 1);
-
-    Rast_read_range(opt_in->answer, "", &range);
-    Rast_get_range_min_max(&range, &min, &max);
-    if (Rast_is_c_null_value(&min) || Rast_is_c_null_value(&max))
-	G_fatal_error(_("Empty input map <%s>"), opt_in->answer);
-    
-    /* REMARK: The following is only true if object ids are continuously numbered */
-    n_objects = max - min + 1;
-    obj_geos = G_malloc(n_objects * sizeof(struct obj_geo));
-    
-    for (i = 0; i < n_objects; i++) {
-	obj_geos[i].area = 0;
-	obj_geos[i].perimeter = 0;
-	obj_geos[i].min_row = nrows;
-	obj_geos[i].max_row = 0;
-	obj_geos[i].min_col = ncols;
-	obj_geos[i].max_col = 0;
-    }
-
-    unit_area = 0.0;
-    if (flag_m->answer) {
-        switch (G_begin_cell_area_calculations()) {
-        case 0:         /* areas don't make sense, but ignore this for now */
-        case 1:
-            planimetric = 1;
-            unit_area = G_area_of_cell_at_row(0);
-            break;
-        default:
-            planimetric = 0;
-            break;
-        }
-    }
-    compute_areas = flag_m->answer && !planimetric;
-    G_begin_distance_calculations();
-
-    G_message(_("Calculating statistics"));
-    for (row = 0; row < nrows; row++) {
-	G_percent(row, nrows + 1, 2);
-
-	Rast_get_c_row(in_fd, cur_in + 1, row);
-	cur = cur_in[0];
-	cur_null = 1;
-        if (compute_areas)
-            unit_area = G_area_of_cell_at_row(row);
-	for (col = 1; col <= ncols; col++) {
-	    left = cur;
-	    cur = cur_in[col];
-	    top = prev_in[col];
-	    
-	    left_null = cur_null;
-	    cur_null = Rast_is_c_null_value(&cur);
-	    top_null = Rast_is_c_null_value(&top);
-
-	    if (!cur_null) {
-		if (flag_m->answer) {
-		    obj_geos[cur - min].area += unit_area;
-		} else {
-		    obj_geos[cur - min].area += 1 * ew_factor;
-		}
-		if (obj_geos[cur - min].min_row > row)
-		    obj_geos[cur - min].min_row = row;
-		if (obj_geos[cur - min].max_row < row + 1)
-		    obj_geos[cur - min].max_row = row + 1;
-		if (obj_geos[cur - min].min_col > col)
-		    obj_geos[cur - min].min_col = col;
-		if (obj_geos[cur - min].max_col < col + 1)
-		    obj_geos[cur - min].max_col = col + 1;
-	    }
-	    
-	    /* TODO: convert perimeter to meters for -m flag */
-	    if (cmp_cells(cur, top, cur_null, top_null)) {
-		if (flag_m->answer) {
-		    double perimeter;
-
-		    /* could be optimized */
-		    perimeter = G_distance(cellhd.west + col * cellhd.ew_res,
-		                           Rast_row_to_northing(row, &cellhd),
-					   cellhd.west + (col + 1) * cellhd.ew_res,
-		                           Rast_row_to_northing(row, &cellhd));
-
-		    if (!cur_null)
-			obj_geos[cur - min].perimeter += perimeter;
-		    if (!top_null)
-			obj_geos[top - min].perimeter += perimeter;
-		}
-		else {
-		    if (!cur_null)
-			obj_geos[cur - min].perimeter += ew_factor;
-		    if (!top_null)
-			obj_geos[top - min].perimeter += ew_factor;
-		}
-	    }
-	    if (cmp_cells(cur, left, cur_null, left_null)) {
-		if (flag_m->answer) {
-		    double perimeter;
-
-		    /* could be optimized */
-		    perimeter = G_distance(cellhd.west + col * cellhd.ew_res,
-		                           Rast_row_to_northing(row, &cellhd),
-					   cellhd.west + (col) * cellhd.ew_res,
-		                           Rast_row_to_northing(row + 1, &cellhd));
-
-		    if (!cur_null)
-			obj_geos[cur - min].perimeter += perimeter;
-		    if (!left_null)
-			obj_geos[left - min].perimeter += perimeter;
-		}
-		else {
-		    if (!cur_null)
-			obj_geos[cur - min].perimeter += 1;
-		    if (!left_null)
-			obj_geos[left - min].perimeter += 1;
-		}
-	    }
-	}
-
-	/* last col, right borders */
-	if (flag_m->answer) {
-	    double perimeter;
-	    perimeter = G_distance(cellhd.east,
-				   Rast_row_to_northing(row, &cellhd),
-				   cellhd.east,
-				   Rast_row_to_northing(row + 1, &cellhd));
-	    if (!cur_null)
-  	        obj_geos[cur - min].perimeter += perimeter;
-	} 
-	else {
-	    if (!cur_null)
-	        obj_geos[cur - min].perimeter += 1;
-	}
-		
-
-	/* switch the buffers so that the current buffer becomes the previous */
-	temp_in = cur_in;
-	cur_in = prev_in;
-	prev_in = temp_in;
-    }
-
-    /* last row, bottom borders */
-    G_percent(row, nrows + 1, 2);
-    for (col = 1; col <= ncols; col++) {
-	top = prev_in[col];
-	top_null = Rast_is_c_null_value(&top);
-
-	if (flag_m->answer) {
-	    double perimeter;
-
-	    /* could be optimized */
-	    perimeter = G_distance(cellhd.west + col * cellhd.ew_res,
-				   Rast_row_to_northing(row, &cellhd),
-				   cellhd.west + (col + 1) * cellhd.ew_res,
-				   Rast_row_to_northing(row, &cellhd));
-
-	    if (!top_null)
-		obj_geos[top - min].perimeter += perimeter;
-	}
-	else {
-	    if (!top_null)
-		obj_geos[top - min].perimeter += ew_factor;
-	}
-    }
-    G_percent(1, 1, 1);
-
-    Rast_close(in_fd);
-    G_free(cur_in);
-    G_free(prev_in);
-
-    G_message(_("Writing output"));
-    /* print table */
-    /* TODO: use separator */
-    /* print table header (column names) */
-    fprintf(out_fp, "cat%s", sep);
-    fprintf(out_fp, "area%s", sep);
-    fprintf(out_fp, "perimeter%s", sep);
-    fprintf(out_fp, "compact_square%s", sep);
-    fprintf(out_fp, "compact_circle%s", sep);
-    fprintf(out_fp, "fd");
-    fprintf(out_fp, "\n");
-
-    /* print table body */
-    for (i = 0; i < n_objects; i++) {
-	 G_percent(i, n_objects - 1, 1);
-	/* skip emtpy objects */
-	if (obj_geos[i].area == 0)
-	    continue;
-
-	fprintf(out_fp, "%d%s", min+i, sep);
-	fprintf(out_fp, "%f%s", obj_geos[i].area, sep);
-	fprintf(out_fp, "%f%s", obj_geos[i].perimeter, sep);
-	fprintf(out_fp, "%f%s", 4 * sqrt(obj_geos[i].area) / obj_geos[i].perimeter, sep);
-	fprintf(out_fp, "%f%s", obj_geos[i].perimeter / (2 * sqrt(M_PI * obj_geos[i].area)), sep);
-	/* log 1 = 0, so avoid that by always adding 0.001 to the area: */
-	fprintf(out_fp, "%f", 2 * log(obj_geos[i].perimeter) / log (obj_geos[i].area + 0.001));
-	/* TODO: convert bounding box area and perimeter to (square) meters for -m flag */
-
-	
-	/* object id: i + min */
-
-	/* TODO */
-	/* smoothness */
-	/* perimeter of bounding box / perimeter -> smoother objects have a higher smoothness value
-	 * smoothness is in the range 0 < smoothness <= 1 */
-	
-	/* bounding box perimeter */
-	
-	/* bounding box size */
-
-	/* variance of X and Y to approximate bounding ellipsoid */
-
-	fprintf(out_fp, "\n");
-    }
-    if (out_fp != stdout)
-	fclose(out_fp);
-
-    exit(EXIT_SUCCESS);
-}
+
+/****************************************************************************
+ *
+ * MODULE:       r.object.geometry
+ *
+ * AUTHOR(S):    Moritz Lennert
+ *               Markus Metz
+ *
+ * PURPOSE:      Fetch object geometry parameters.
+ *
+ * COPYRIGHT:    (C) 2016 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the file COPYING that comes with GRASS
+ *               for details.
+ *
+ ***************************************************************************/
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <math.h>
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/glocale.h>
+
+/* compare two cell values
+ * return 0 if equal, 1 if different */
+static int cmp_cells(CELL a, CELL b, int a_null, int b_null)
+{
+    return (a_null + b_null == 1 || (a_null + b_null == 0 && a != b));
+}
+
+int main(int argc, char *argv[])
+{
+    int row, col, nrows, ncols;
+
+    struct Range range;
+    CELL min, max;
+    int in_fd;
+    int i;
+    struct GModule *module;
+    struct Option *opt_in;
+    struct Option *opt_out;
+    struct Option *opt_sep;
+    struct Flag *flag_m;
+    char *sep;
+    FILE *out_fp;
+    CELL *prev_in, *cur_in, *temp_in;
+    CELL cur, top, left;
+    int cur_null, top_null, left_null;
+    int len;
+    struct obj_geo 
+    {
+	double area, perimeter;
+	int min_row, max_row, min_col, max_col; /* bounding box */
+    } *obj_geos;
+    double unit_area;
+    int n_objects;
+    int planimetric, compute_areas;
+    struct Cell_head cellhd;
+    double ew_factor;
+
+    G_gisinit(argv[0]);
+
+    /* Define the different options */
+
+    module = G_define_module();
+    G_add_keyword(_("raster"));
+    G_add_keyword(_("statistics"));
+    G_add_keyword(_("reclass"));
+    G_add_keyword(_("clumps"));
+    module->description =
+	_("Calculates geometry parameters for raster objects.");
+
+    opt_in = G_define_standard_option(G_OPT_R_INPUT);
+
+    opt_out = G_define_standard_option(G_OPT_F_OUTPUT);
+    opt_out->required = NO;
+
+    opt_sep = G_define_standard_option(G_OPT_F_SEP);
+
+    flag_m = G_define_flag();
+    flag_m->key = 'm';
+    flag_m->label = _("Use meters as units instead of cells");
+
+    /* parse options */
+    if (G_parser(argc, argv))
+	exit(EXIT_FAILURE);
+
+    sep = G_option_to_separator(opt_sep);
+    in_fd = Rast_open_old(opt_in->answer, "");
+
+    if (Rast_get_map_type(in_fd) != CELL_TYPE)
+	G_fatal_error(_("Input raster mus be of type CELL"));
+
+    if (opt_out->answer != NULL && strcmp(opt_out->answer, "-") != 0) {
+        if(! (out_fp = fopen(opt_out->answer, "w")))
+            G_fatal_error(_("Unable to open file <%s> for writing"), opt_out->answer);
+    } else {
+    	out_fp = stdout;
+    }
+
+    Rast_get_window(&cellhd);
+    nrows = cellhd.rows;
+    ncols = cellhd.cols;
+    /* for unit = cells */
+    ew_factor = cellhd.ew_res / cellhd.ns_res;
+
+    /* allocate CELL buffers two columns larger than current window */
+    len = (ncols + 2) * sizeof(CELL);
+    prev_in = (CELL *) G_malloc(len);
+    cur_in = (CELL *) G_malloc(len);
+
+    /* fake a previous row which is all NULL */
+    Rast_set_c_null_value(prev_in, ncols + 2);
+
+    /* set left and right edge to NULL */
+    Rast_set_c_null_value(&cur_in[0], 1);
+    Rast_set_c_null_value(&cur_in[ncols + 1], 1);
+
+    Rast_read_range(opt_in->answer, "", &range);
+    Rast_get_range_min_max(&range, &min, &max);
+    if (Rast_is_c_null_value(&min) || Rast_is_c_null_value(&max))
+	G_fatal_error(_("Empty input map <%s>"), opt_in->answer);
+    
+    /* REMARK: The following is only true if object ids are continuously numbered */
+    n_objects = max - min + 1;
+    obj_geos = G_malloc(n_objects * sizeof(struct obj_geo));
+    
+    for (i = 0; i < n_objects; i++) {
+	obj_geos[i].area = 0;
+	obj_geos[i].perimeter = 0;
+	obj_geos[i].min_row = nrows;
+	obj_geos[i].max_row = 0;
+	obj_geos[i].min_col = ncols;
+	obj_geos[i].max_col = 0;
+    }
+
+    unit_area = 0.0;
+    if (flag_m->answer) {
+        switch (G_begin_cell_area_calculations()) {
+        case 0:         /* areas don't make sense, but ignore this for now */
+        case 1:
+            planimetric = 1;
+            unit_area = G_area_of_cell_at_row(0);
+            break;
+        default:
+            planimetric = 0;
+            break;
+        }
+    }
+    compute_areas = flag_m->answer && !planimetric;
+    G_begin_distance_calculations();
+
+    G_message(_("Calculating statistics"));
+    for (row = 0; row < nrows; row++) {
+	G_percent(row, nrows + 1, 2);
+
+	Rast_get_c_row(in_fd, cur_in + 1, row);
+	cur = cur_in[0];
+	cur_null = 1;
+        if (compute_areas)
+            unit_area = G_area_of_cell_at_row(row);
+	for (col = 1; col <= ncols; col++) {
+	    left = cur;
+	    cur = cur_in[col];
+	    top = prev_in[col];
+	    
+	    left_null = cur_null;
+	    cur_null = Rast_is_c_null_value(&cur);
+	    top_null = Rast_is_c_null_value(&top);
+
+	    if (!cur_null) {
+		if (flag_m->answer) {
+		    obj_geos[cur - min].area += unit_area;
+		} else {
+		    obj_geos[cur - min].area += 1 * ew_factor;
+		}
+		if (obj_geos[cur - min].min_row > row)
+		    obj_geos[cur - min].min_row = row;
+		if (obj_geos[cur - min].max_row < row + 1)
+		    obj_geos[cur - min].max_row = row + 1;
+		if (obj_geos[cur - min].min_col > col)
+		    obj_geos[cur - min].min_col = col;
+		if (obj_geos[cur - min].max_col < col + 1)
+		    obj_geos[cur - min].max_col = col + 1;
+	    }
+	    
+	    /* TODO: convert perimeter to meters for -m flag */
+	    if (cmp_cells(cur, top, cur_null, top_null)) {
+		if (flag_m->answer) {
+		    double perimeter;
+
+		    /* could be optimized */
+		    perimeter = G_distance(cellhd.west + col * cellhd.ew_res,
+		                           Rast_row_to_northing(row, &cellhd),
+					   cellhd.west + (col + 1) * cellhd.ew_res,
+		                           Rast_row_to_northing(row, &cellhd));
+
+		    if (!cur_null)
+			obj_geos[cur - min].perimeter += perimeter;
+		    if (!top_null)
+			obj_geos[top - min].perimeter += perimeter;
+		}
+		else {
+		    if (!cur_null)
+			obj_geos[cur - min].perimeter += ew_factor;
+		    if (!top_null)
+			obj_geos[top - min].perimeter += ew_factor;
+		}
+	    }
+	    if (cmp_cells(cur, left, cur_null, left_null)) {
+		if (flag_m->answer) {
+		    double perimeter;
+
+		    /* could be optimized */
+		    perimeter = G_distance(cellhd.west + col * cellhd.ew_res,
+		                           Rast_row_to_northing(row, &cellhd),
+					   cellhd.west + (col) * cellhd.ew_res,
+		                           Rast_row_to_northing(row + 1, &cellhd));
+
+		    if (!cur_null)
+			obj_geos[cur - min].perimeter += perimeter;
+		    if (!left_null)
+			obj_geos[left - min].perimeter += perimeter;
+		}
+		else {
+		    if (!cur_null)
+			obj_geos[cur - min].perimeter += 1;
+		    if (!left_null)
+			obj_geos[left - min].perimeter += 1;
+		}
+	    }
+	}
+
+	/* last col, right borders */
+	if (flag_m->answer) {
+	    double perimeter;
+	    perimeter = G_distance(cellhd.east,
+				   Rast_row_to_northing(row, &cellhd),
+				   cellhd.east,
+				   Rast_row_to_northing(row + 1, &cellhd));
+	    if (!cur_null)
+  	        obj_geos[cur - min].perimeter += perimeter;
+	} 
+	else {
+	    if (!cur_null)
+	        obj_geos[cur - min].perimeter += 1;
+	}
+		
+
+	/* switch the buffers so that the current buffer becomes the previous */
+	temp_in = cur_in;
+	cur_in = prev_in;
+	prev_in = temp_in;
+    }
+
+    /* last row, bottom borders */
+    G_percent(row, nrows + 1, 2);
+    for (col = 1; col <= ncols; col++) {
+	top = prev_in[col];
+	top_null = Rast_is_c_null_value(&top);
+
+	if (flag_m->answer) {
+	    double perimeter;
+
+	    /* could be optimized */
+	    perimeter = G_distance(cellhd.west + col * cellhd.ew_res,
+				   Rast_row_to_northing(row, &cellhd),
+				   cellhd.west + (col + 1) * cellhd.ew_res,
+				   Rast_row_to_northing(row, &cellhd));
+
+	    if (!top_null)
+		obj_geos[top - min].perimeter += perimeter;
+	}
+	else {
+	    if (!top_null)
+		obj_geos[top - min].perimeter += ew_factor;
+	}
+    }
+    G_percent(1, 1, 1);
+
+    Rast_close(in_fd);
+    G_free(cur_in);
+    G_free(prev_in);
+
+    G_message(_("Writing output"));
+    /* print table */
+    /* TODO: use separator */
+    /* print table header (column names) */
+    fprintf(out_fp, "cat%s", sep);
+    fprintf(out_fp, "area%s", sep);
+    fprintf(out_fp, "perimeter%s", sep);
+    fprintf(out_fp, "compact_square%s", sep);
+    fprintf(out_fp, "compact_circle%s", sep);
+    fprintf(out_fp, "fd");
+    fprintf(out_fp, "\n");
+
+    /* print table body */
+    for (i = 0; i < n_objects; i++) {
+	 G_percent(i, n_objects - 1, 1);
+	/* skip emtpy objects */
+	if (obj_geos[i].area == 0)
+	    continue;
+
+	fprintf(out_fp, "%d%s", min+i, sep);
+	fprintf(out_fp, "%f%s", obj_geos[i].area, sep);
+	fprintf(out_fp, "%f%s", obj_geos[i].perimeter, sep);
+	fprintf(out_fp, "%f%s", 4 * sqrt(obj_geos[i].area) / obj_geos[i].perimeter, sep);
+	fprintf(out_fp, "%f%s", obj_geos[i].perimeter / (2 * sqrt(M_PI * obj_geos[i].area)), sep);
+	/* log 1 = 0, so avoid that by always adding 0.001 to the area: */
+	fprintf(out_fp, "%f", 2 * log(obj_geos[i].perimeter) / log (obj_geos[i].area + 0.001));
+	/* TODO: convert bounding box area and perimeter to (square) meters for -m flag */
+
+	
+	/* object id: i + min */
+
+	/* TODO */
+	/* smoothness */
+	/* perimeter of bounding box / perimeter -> smoother objects have a higher smoothness value
+	 * smoothness is in the range 0 < smoothness <= 1 */
+	
+	/* bounding box perimeter */
+	
+	/* bounding box size */
+
+	/* variance of X and Y to approximate bounding ellipsoid */
+
+	fprintf(out_fp, "\n");
+    }
+    if (out_fp != stdout)
+	fclose(out_fp);
+
+    exit(EXIT_SUCCESS);
+}


Property changes on: grass-addons/grass7/raster/r.object.geometry/main.c
___________________________________________________________________
Added: svn:mime-type
   + text/x-csrc
Added: svn:eol-style
   + native


Property changes on: grass-addons/grass7/raster/r.randomforest/ml_classifiers.py
___________________________________________________________________
Added: svn:mime-type
   + text/x-python
Added: svn:eol-style
   + native


Property changes on: grass-addons/grass7/raster/r.randomforest/ml_utils.py
___________________________________________________________________
Added: svn:mime-type
   + text/x-python
Added: svn:eol-style
   + native


Property changes on: grass-addons/grass7/vector/v.faultdirections/v.faultdirections.html
___________________________________________________________________
Modified: svn:keywords
   - Date
   + Author Date Id


Property changes on: grass-addons/grass7/vector/v.in.survey/Makefile
___________________________________________________________________
Added: svn:mime-type
   + text/x-makefile
Added: svn:eol-style
   + native


Property changes on: grass-addons/grass7/vector/v.in.survey/img_NC_dxf.png
___________________________________________________________________
Modified: svn:mime-type
   - application/octet-stream
   + image/png


Property changes on: grass-addons/grass7/vector/v.in.survey/img_lyrs_broken.png
___________________________________________________________________
Modified: svn:mime-type
   - application/octet-stream
   + image/png


Property changes on: grass-addons/grass7/vector/v.in.survey/img_soils_correct.png
___________________________________________________________________
Modified: svn:mime-type
   - application/octet-stream
   + image/png


Property changes on: grass-addons/grass7/vector/v.in.survey/img_sorted_boundaries.png
___________________________________________________________________
Modified: svn:mime-type
   - application/octet-stream
   + image/png


Property changes on: grass-addons/grass7/vector/v.in.survey/v.in.survey.py
___________________________________________________________________
Added: svn:mime-type
   + text/x-python
Added: svn:eol-style
   + native



More information about the grass-commit mailing list