[GRASS-SVN] r61507 - grass/trunk/vector/v.generalize

svn_grass at osgeo.org svn_grass at osgeo.org
Sun Aug 3 15:01:54 PDT 2014


Author: neteler
Date: 2014-08-03 15:01:54 -0700 (Sun, 03 Aug 2014)
New Revision: 61507

Modified:
   grass/trunk/vector/v.generalize/main.c
Log:
v.generalize: create optionally error vector map (trac #2373)

Modified: grass/trunk/vector/v.generalize/main.c
===================================================================
--- grass/trunk/vector/v.generalize/main.c	2014-08-03 03:11:21 UTC (rev 61506)
+++ grass/trunk/vector/v.generalize/main.c	2014-08-03 22:01:54 UTC (rev 61507)
@@ -42,12 +42,12 @@
 
 int main(int argc, char *argv[])
 {
-    struct Map_info In, Out;
+    struct Map_info In, Out, Error;
     struct line_pnts *Points;
     struct line_cats *Cats;
     int i, type, iter;
     struct GModule *module;	/* GRASS module for parsing arguments */
-    struct Option *map_in, *map_out, *thresh_opt, *method_opt,
+    struct Option *map_in, *map_out, *error_out, *thresh_opt, *method_opt,
 	*look_ahead_opt;
     struct Option *iterations_opt, *cat_opt, *alpha_opt, *beta_opt, *type_opt;
     struct Option *field_opt, *where_opt, *reduction_opt, *slide_opt;
@@ -93,6 +93,11 @@
     
     map_out = G_define_standard_option(G_OPT_V_OUTPUT);
 
+    error_out = G_define_standard_option(G_OPT_V_OUTPUT);
+    error_out->key = "error";
+    error_out->required = NO;
+    error_out->description =
+	_("Error map of all lines and boundaries not being generalized due to topology issues or over-simplification");
 
     method_opt = G_define_option();
     method_opt->key = "method";
@@ -324,7 +329,14 @@
 	G_fatal_error(_("Unable to create vector map <%s>"), map_out->answer);
     }
 
+    if(error_out->answer)
+        if (0 > Vect_open_new(&Error, error_out->answer, with_z)) {
+	    Vect_close(&In);
+	    G_fatal_error(_("Unable to create error vector map <%s>"), error_out->answer);
+        }
 
+
+
     Vect_copy_head_data(&In, &Out);
     Vect_hist_copy(&In, &Out);
     Vect_hist_command(&Out);
@@ -533,12 +545,16 @@
 	    if (Points->n_points < 2) {
 		after = APoints->n_points;
 		n_oversimplified++;
+                if(error_out->answer)
+		    Vect_write_line(&Error, type, APoints, Cats);
 	    }
 	    /* check for topology corruption */
 	    else if (type == GV_BOUNDARY) {
 		if (!check_topo(&Out, i, APoints, Points, Cats)) {
 		    after = APoints->n_points;
 		    not_modified_boundaries++;
+                    if(error_out->answer)
+		        Vect_write_line(&Error, type, APoints, Cats);
 		}
 		else
 		    after = Points->n_points;
@@ -561,12 +577,18 @@
 
 	/* make sure that clean topo is built at the end */
 	Vect_build_partial(&Out, GV_BUILD_NONE);
+        if(error_out->answer)
+	    Vect_build_partial(&Error, GV_BUILD_NONE);
     }
 
     Vect_build(&Out);
+    if(error_out->answer)
+        Vect_build(&Error);
 
     Vect_close(&In);
     Vect_close(&Out);
+    if(error_out->answer)
+        Vect_close(&Error);
 
     G_message("-----------------------------------------------------");
     if (total_input != 0 && total_input != total_output)



More information about the grass-commit mailing list