[GRASS-SVN] r56759 - grass/branches/develbranch_6/misc/m.cogo

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Jun 17 04:04:18 PDT 2013


Author: hamish
Date: 2013-06-17 04:04:18 -0700 (Mon, 17 Jun 2013)
New Revision: 56759

Modified:
   grass/branches/develbranch_6/misc/m.cogo/description.html
   grass/branches/develbranch_6/misc/m.cogo/main.c
Log:
add flag to repeat the first coord, closing a boundary (wish #1725)
and increase precision to ensure a lossless round trip.


Modified: grass/branches/develbranch_6/misc/m.cogo/description.html
===================================================================
--- grass/branches/develbranch_6/misc/m.cogo/description.html	2013-06-17 09:35:34 UTC (rev 56758)
+++ grass/branches/develbranch_6/misc/m.cogo/description.html	2013-06-17 11:04:18 UTC (rev 56759)
@@ -120,9 +120,9 @@
        v.in.ascii -n format=standard out=cogo_line
 </pre></div>
 
-Unclosed lines may be snapped with <em>v.clean</em>, converted to
-boundaries with <em>v.type</em>, and closed boundaries may be
-converted to areas with <em>v.centroids</em>.
+Lines may be closed by using the <b>-c</b> flag or snapped with
+<em>v.clean</em>, lines may be converted to boundaries with <em>v.type</em>,
+and closed boundaries may be converted to areas with <em>v.centroids</em>.
 
 
 <h2>SEE ALSO</h2>
@@ -136,7 +136,6 @@
 </em>
 
 
-
 <h2>AUTHOR</h2>
 
 Eric G. Miller

Modified: grass/branches/develbranch_6/misc/m.cogo/main.c
===================================================================
--- grass/branches/develbranch_6/misc/m.cogo/main.c	2013-06-17 09:35:34 UTC (rev 56758)
+++ grass/branches/develbranch_6/misc/m.cogo/main.c	2013-06-17 11:04:18 UTC (rev 56759)
@@ -49,29 +49,29 @@
 };
 
 
-static void print_coordinates(FILE * outfile, struct survey_record *in)
+static void print_coordinates(FILE *outfile, struct survey_record *in)
 {
     if (in->haslabel == YES)
-	fprintf(outfile, "%f %f %s\n", in->x, in->y, in->label);
+	fprintf(outfile, "%.15g %.15g %s\n", in->x, in->y, in->label);
     else
-	fprintf(outfile, "%f %f\n", in->x, in->y);
+	fprintf(outfile, "%.15g %.15g\n", in->x, in->y);
 }
 
 
-static void print_cogo(FILE * outfile, struct survey_record *in)
+static void print_cogo(FILE *outfile, struct survey_record *in)
 {
     if (in->haslabel == YES)
-	fprintf(outfile, "%s %s %d:%d:%.3f %s %f\n",
+	fprintf(outfile, "%s %s %02d:%02d:%02.9g %s %.13g\n",
 		in->label, in->n_s, in->deg, in->min, in->sec,
 		in->e_w, in->dist);
     else
-	fprintf(outfile, "%s %d:%d:%.3f %s %f\n",
+	fprintf(outfile, "%s %02d:%02d:%02.9g %s %.13g\n",
 		in->n_s, in->deg, in->min, in->sec, in->e_w, in->dist);
 
 }
 
 
-static const char *next_line(FILE * infile)
+static const char *next_line(FILE *infile)
 {
     static char line[512];
     const char *cptr;
@@ -210,12 +210,14 @@
     struct Flag *format;
     struct Flag *quiet;
     struct Flag *reverse;
+    struct Flag *close;
     struct GModule *module;
     FILE *infile, *outfile;
-    struct survey_record record;
+    struct survey_record record, first_record;
     const char *cptr;
     char *ss;
-    int verbose = 1, linenum = 0;
+    int verbose = TRUE;
+    unsigned long linenum = 0, dataline = 0;
     int (*parse_line) (const char *, struct survey_record *);
     void (*print_func) (FILE *, struct survey_record *);
 
@@ -240,6 +242,11 @@
     reverse->description =
 	_("Convert from coordinates to bearing and distance");
 
+    close = G_define_flag();
+    close->key = 'c';
+    close->description =
+	_("Repeat the starting coordinate at the end to close a loop");
+
     input = G_define_standard_option(G_OPT_F_INPUT);
     input->required = NO;
     input->answer = "-";
@@ -288,7 +295,7 @@
     }
 
     if (quiet->answer)
-	verbose = 0;
+	verbose = FALSE;
 
     if (reverse->answer) {
 	parse_line = parse_reverse;
@@ -324,9 +331,19 @@
 		G_warning(_("Input parse error on line %d"), linenum);
 	    continue;
 	}
+
+	dataline++;
+
+	if (dataline == 1)
+	    first_record = record;
+
 	print_func(outfile, &record);
     }
 
+    if (close->answer)
+	print_func(outfile, &first_record);
+
+
     if (infile != stdin)
 	fclose(infile);
     if (outfile != stdout)



More information about the grass-commit mailing list