[GRASS-SVN] r61519 - grass/trunk/vector/v.mkgrid

svn_grass at osgeo.org svn_grass at osgeo.org
Mon Aug 4 14:54:45 PDT 2014


Author: lucadelu
Date: 2014-08-04 14:54:45 -0700 (Mon, 04 Aug 2014)
New Revision: 61519

Modified:
   grass/trunk/vector/v.mkgrid/local_proto.h
   grass/trunk/vector/v.mkgrid/main.c
   grass/trunk/vector/v.mkgrid/write_grid.c
Log:
v.mkgrid: added support to lines output through -l flag (ticket #394)

Modified: grass/trunk/vector/v.mkgrid/local_proto.h
===================================================================
--- grass/trunk/vector/v.mkgrid/local_proto.h	2014-08-04 21:38:43 UTC (rev 61518)
+++ grass/trunk/vector/v.mkgrid/local_proto.h	2014-08-04 21:54:45 UTC (rev 61519)
@@ -2,6 +2,6 @@
 void rotate(double *, double *, double, double, double);
 
 /* write_grid.c */
-int write_grid(struct grid_description *, struct Map_info *, int);
+int write_grid(struct grid_description *, struct Map_info *, int, int);
 int write_vect(double, double, double, double, struct Map_info *,
-	       struct line_pnts *);
+	       struct line_pnts *, int);

Modified: grass/trunk/vector/v.mkgrid/main.c
===================================================================
--- grass/trunk/vector/v.mkgrid/main.c	2014-08-04 21:38:43 UTC (rev 61518)
+++ grass/trunk/vector/v.mkgrid/main.c	2014-08-04 21:54:45 UTC (rev 61519)
@@ -6,8 +6,10 @@
  *               Upgrade to 5.7 Radim Blazek 10/2004
  *               Hamish Bowman <hamish_b yahoo.com>,
  *               Jachym Cepicky <jachym les-ejk.cz>, Markus Neteler <neteler itc.it>
+ *               Ivan Shevlakov: points support -p                
+ *               Luca Delucchi: lines support -l
  * PURPOSE:      
- * COPYRIGHT:    (C) 1999-2009 by the GRASS Development Team
+ * COPYRIGHT:    (C) 1999-2014 by the GRASS Development Team
  *
  *               This program is free software under the GNU General
  *               Public License (>=v2). Read the file COPYING that
@@ -47,8 +49,8 @@
     struct Map_info Map;
     struct Option *vectname, *grid, *coord, *box, *angle, *position_opt, *breaks;
     struct GModule *module;
-    struct Flag *points_fl;
-    int points_p;
+    struct Flag *points_fl, *line_fl;
+    int points_p, line_p, output_type;
     char *desc;
 
     struct line_pnts *Points;
@@ -132,9 +134,20 @@
     points_fl->description =
 	_("Create grid of points instead of areas and centroids");
 
+    line_fl = G_define_flag();
+    line_fl->key = 'l';
+    line_fl->description =
+	_("Create grid as lines, instead of areas");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
+    line_p = line_fl->answer;
+    if (line_p) {
+	output_type = GV_LINE;
+    } else {
+	output_type = GV_BOUNDARY;
+    }
 
     points_p = points_fl->answer;
 
@@ -256,58 +269,63 @@
 
     if (!points_p) {
 	/* create areas */
-	write_grid(&grid_info, &Map, nbreaks);
+	write_grid(&grid_info, &Map, nbreaks, output_type);
     }
 
     /* Create a grid of label points at the centres of the grid cells */
     G_verbose_message(_("Creating centroids..."));
 
     /* Write out centroids and attributes */
-    db_begin_transaction(Driver);
-    attCount = 0;
-    for (i = 0; i < grid_info.num_rows; ++i) {
-	for (j = 0; j < grid_info.num_cols; ++j) {
-	    double x, y;
-	    const int point_type = points_p ? GV_POINT : GV_CENTROID;
+    /* If the output id is lines it skips to add centroids and attributes
+       TODO decide what to write in the attribute table
+     */
+    if (!line_p) {
+      db_begin_transaction(Driver);
+      attCount = 0;
+      for (i = 0; i < grid_info.num_rows; ++i) {
+	  for (j = 0; j < grid_info.num_cols; ++j) {
+	      double x, y;
+	      const int point_type = points_p ? GV_POINT : GV_CENTROID;
 
-	    x = grid_info.origin_x + (0.5 + j) * grid_info.length;
-	    y = grid_info.origin_y + (0.5 + i) * grid_info.width;
+	      x = grid_info.origin_x + (0.5 + j) * grid_info.length;
+	      y = grid_info.origin_y + (0.5 + i) * grid_info.width;
 
-	    rotate(&x, &y, grid_info.origin_x, grid_info.origin_y,
-		   grid_info.angle);
+	      rotate(&x, &y, grid_info.origin_x, grid_info.origin_y,
+		    grid_info.angle);
 
-	    Vect_reset_line(Points);
-	    Vect_reset_cats(Cats);
+	      Vect_reset_line(Points);
+	      Vect_reset_cats(Cats);
 
-	    Vect_append_point(Points, x, y, 0.0);
-	    Vect_cat_set(Cats, 1, attCount + 1);
-	    Vect_write_line(&Map, point_type, Points, Cats);
+	      Vect_append_point(Points, x, y, 0.0);
+	      Vect_cat_set(Cats, 1, attCount + 1);
+	      Vect_write_line(&Map, point_type, Points, Cats);
 
-	    sprintf(buf, "insert into %s values ", Fi->table);
-	    if (db_set_string(&sql, buf) != DB_OK)
-		G_fatal_error(_("Unable to fill attribute table"));
+	      sprintf(buf, "insert into %s values ", Fi->table);
+	      if (db_set_string(&sql, buf) != DB_OK)
+		  G_fatal_error(_("Unable to fill attribute table"));
 
-            if (grid_info.num_rows < 27 && grid_info.num_cols < 27) {
-		sprintf(buf,
-			"( %d, %d, %d, '%c', '%c' )",
-			attCount + 1, grid_info.num_rows - i,
-			j + 1, 'A' + grid_info.num_rows - i - 1, 'A' + j);
-	    }
-	    else {
-		sprintf(buf, "( %d, %d, %d )",
-			attCount + 1, i + 1, j + 1);
-	    }
-            if (db_append_string(&sql, buf) != DB_OK)
-                    G_fatal_error(_("Unable to fill attribute table"));
+	      if (grid_info.num_rows < 27 && grid_info.num_cols < 27) {
+		  sprintf(buf,
+			  "( %d, %d, %d, '%c', '%c' )",
+			  attCount + 1, grid_info.num_rows - i,
+			  j + 1, 'A' + grid_info.num_rows - i - 1, 'A' + j);
+	      }
+	      else {
+		  sprintf(buf, "( %d, %d, %d )",
+			  attCount + 1, i + 1, j + 1);
+	      }
+	      if (db_append_string(&sql, buf) != DB_OK)
+		      G_fatal_error(_("Unable to fill attribute table"));
 
-	    G_debug(3, "SQL: %s", db_get_string(&sql));
+	      G_debug(3, "SQL: %s", db_get_string(&sql));
 
-	    if (db_execute_immediate(Driver, &sql) != DB_OK) {
-		G_fatal_error(_("Unable to insert new record: %s"),
-			    db_get_string(&sql));
-	    }
-	    attCount++;
-	}
+	      if (db_execute_immediate(Driver, &sql) != DB_OK) {
+		  G_fatal_error(_("Unable to insert new record: %s"),
+			      db_get_string(&sql));
+	      }
+	      attCount++;
+	  }
+      }
     }
     db_commit_transaction(Driver);
 

Modified: grass/trunk/vector/v.mkgrid/write_grid.c
===================================================================
--- grass/trunk/vector/v.mkgrid/write_grid.c	2014-08-04 21:38:43 UTC (rev 61518)
+++ grass/trunk/vector/v.mkgrid/write_grid.c	2014-08-04 21:54:45 UTC (rev 61519)
@@ -5,7 +5,7 @@
 #include "grid_structs.h"
 #include "local_proto.h"
 
-int write_grid(struct grid_description *grid_info, struct Map_info *Map, int nbreaks)
+int write_grid(struct grid_description *grid_info, struct Map_info *Map, int nbreaks, int out_type)
 {
 
     int i, k, j;
@@ -65,7 +65,7 @@
 		       angle);
 		rotate(&next_x, &dum, grid_info->origin_x,
 		       grid_info->origin_y, angle);
-		write_vect(x, y, next_x, dum, Map, Points);
+		write_vect(x, y, next_x, dum, Map, Points, out_type);
 
 		y = sy;
 		x = next_x = snext_x;
@@ -95,7 +95,7 @@
 	    rotate(&dum, &next_y, grid_info->origin_x, grid_info->origin_y,
 		   angle);
 
-	    write_vect(x, y, dum, next_y, Map, Points);
+	    write_vect(x, y, dum, next_y, Map, Points, out_type);
 
 	    x = sx;
 	    y = next_y = snext_y;
@@ -117,7 +117,7 @@
 #define  NUM_POINTS  2
 
 int write_vect(double x1, double y1, double x2, double y2,
-	       struct Map_info *Map, struct line_pnts *Points) /* new with Vlib */
+	       struct Map_info *Map, struct line_pnts *Points, int out_type)
 {
     static struct line_cats *Cats = NULL;
 
@@ -132,8 +132,7 @@
 
     if (0 > Vect_copy_xyz_to_pnts(Points, xarray, yarray, NULL, NUM_POINTS))
 	G_fatal_error(_("Out of memory"));
+    Vect_write_line(Map, out_type, Points, Cats);
 
-    Vect_write_line(Map, GV_BOUNDARY, Points, Cats);
-
     return 0;
 }



More information about the grass-commit mailing list