[GRASS-dev] v.to.db option=slope

Jachym Cepicky jachym.cepicky at centrum.cz
Mon Dec 11 12:53:57 EST 2006


hi, 

since nobody really complained, I commited the patch. v.to.db has new
option "slope" now

jachym

On Thu, Dec 07, 2006 at 05:30:00PM +0100, Jachym Cepicky wrote:
> Hallo,
> somebody asked on IRC, how to calculate slopes for vector lines.
> 
> This patch should add new option "slope" to v.to.db module and calculate slope steepness
> for each vector line
> 
> What do you think, shall I commit this patch to cvs?
> 
> Jachym
> -- 
> Jachym Cepicky
> e-mail: jachym.cepicky at centrum.cz
> URL: http://les-ejk.cz
> GPG: http://www.les-ejk.cz/pgp/jachym_cepicky-gpg.pub
> -----------------------------------------   
> OFFICE:                                     
> Department of Geoinformation Technologies 
> Zemedelska 3
> 613 00, Brno
> Czech Republick
> e-mail: xcepicky at node.mendelu.cz
> URL:    http://mapserver.mendelu.cz
> Tel.:   +420 545 134 514

> Index: vector/v.to.db/global.h
> ===================================================================
> RCS file: /grassrepository/grass6/vector/v.to.db/global.h,v
> retrieving revision 1.8
> diff -u -r1.8 global.h
> --- vector/v.to.db/global.h	9 Feb 2006 03:09:07 -0000	1.8
> +++ vector/v.to.db/global.h	7 Dec 2006 16:21:18 -0000
> @@ -13,7 +13,7 @@
>                              /* for sides set to 2, if more than 1 area category was found, */
>                              /* including no category (cat = -1)! */
>      int     i1,i2; /* values; i1: query (result int), sides; i2: sides */
> -    double  d1,d2,d3; /* values (length, area, x/y/z, query) */
> +    double  d1,d2,d3,d4; /* values (length, area, x/y/z, query, slope) */
>      char    *str1;  /* string value (query) */
>      int     *qcat; /* array query categories */
>      int     nqcats; /* number of query cats */
> @@ -65,6 +65,8 @@
>  
>  #define O_START        10  /* line/boundary starting point */
>  #define O_END          11  /* line/boundary end point */
> +
> +#define O_SLOPE 	12 /* Line slope */
>  
>  #define U_ACRES		1
>  #define U_HECTARES	2
> Index: vector/v.to.db/lines.c
> ===================================================================
> RCS file: /grassrepository/grass6/vector/v.to.db/lines.c,v
> retrieving revision 1.8
> diff -u -r1.8 lines.c
> --- vector/v.to.db/lines.c	9 Feb 2006 03:09:07 -0000	1.8
> +++ vector/v.to.db/lines.c	7 Dec 2006 16:21:18 -0000
> @@ -48,7 +48,7 @@
>  
>  /* 
>   * Read: - points/centroids : cat,count,coor
> - *       - lines/boundaries : cat,count,length
> + *       - lines/boundaries : cat,count,length,slope
>   */
>  
>  int 
> @@ -58,7 +58,7 @@
>      register int line_num;
>      struct line_pnts *Points;
>      struct line_cats *Cats, *LCats, *RCats;
> -    double len;
> +    double len,slope;
>  
>      /* Initialize the Point struct */
>      Points = Vect_new_line_struct();
> @@ -137,7 +137,13 @@
>  		    
>                      read_side_cats ( LCats, &(Values[idx].i1), &(Values[idx].count1) );
>                      read_side_cats ( RCats, &(Values[idx].i2), &(Values[idx].count2) );
> +		} else if ( options.option == O_SLOPE && (type & GV_LINES) ) {
> +		    /* Calculate line slope */
> +		    len = length (Points->n_points, Points->x, Points->y);
> +                    slope = (Points->z[Points->n_points-1] - Points->z[0])/len;
> +		    Values[idx].d1 += slope;
>  		}
> +
>  		found = 1;
>  	    }
>  	}
> @@ -167,7 +173,13 @@
>  	    } else if ( options.option == O_SIDES && type == GV_BOUNDARY ) {
>  		read_side_cats ( LCats, &(Values[idx].i1), &(Values[idx].count1) );
>  		read_side_cats ( RCats, &(Values[idx].i2), &(Values[idx].count2) );
> -	    }
> +            } else if ( options.option == O_SLOPE && (type & GV_LINES) ) {
> +                /* Calculate line slope */
> +                len = length (Points->n_points, Points->x, Points->y);
> +                slope = (Points->z[Points->n_points-1] - Points->z[0])/len;
> +                Values[idx].d1 += slope;
> +            }
> +
>  	}
>      }
>  
> Index: vector/v.to.db/parse.c
> ===================================================================
> RCS file: /grassrepository/grass6/vector/v.to.db/parse.c,v
> retrieving revision 1.19
> diff -u -r1.19 parse.c
> --- vector/v.to.db/parse.c	21 Sep 2006 12:50:39 -0000	1.19
> +++ vector/v.to.db/parse.c	7 Dec 2006 16:21:18 -0000
> @@ -48,7 +48,7 @@
>      parms.option->type         = TYPE_STRING;
>      parms.option->required     = YES;
>      parms.option->multiple     = NO;
> -    parms.option->options      = "cat,area,compact,perimeter,length,count,coor,start,end,sides,query";
> +    parms.option->options      = "cat,area,compact,perimeter,length,count,coor,start,end,sides,query,slope";
>      parms.option->description  = _("Value to upload");
>      parms.option->descriptions  = 
>  		 "cat;insert new row for each category if doesn't exist yet;"
> @@ -64,7 +64,8 @@
>  		 "sides;categories of areas on the left and right side of the boundary, "
>  		       "'qlayer' is used for area category;"
>  		 "query;result of a database query for all records of the geometry"
> -		       "(or geometries) from table specified by 'qlayer' option";	
> +		       "(or geometries) from table specified by 'qlayer' option;"
> +		 "slope;slope steepness of vector line or boundary";
>  
>      parms.units = G_define_option();
>      parms.units->key   = "units";
> @@ -100,7 +101,7 @@
>      
>      flags.t = G_define_flag();
>      flags.t->key = 'c';
> -    flags.t->description = _("In print mode prints totals for options: length,area,count");	
> +    flags.t->description = _("In print mode prints totals for options: length,area");	
>  
>      if (G_parser(argc,argv)) exit(EXIT_FAILURE);
>  
> @@ -132,7 +133,7 @@
>      }
>      
>      if ( options.option == O_AREA || options.option == O_LENGTH || options.option == O_COUNT 
> -	 || options.option == O_QUERY || options.option == O_COMPACT || options.option == O_PERIMETER) /* one column required */
> +	 || options.option == O_QUERY || options.option == O_COMPACT || options.option == O_PERIMETER || options.option == O_SLOPE ) /* one column required */
>      {
>  	if ( ncols != 1 ) {
>  	    G_fatal_error ( _("This option requires one column") );
> @@ -187,6 +188,7 @@
>      else if (strcmp (s, "query") == 0) x = O_QUERY;
>      else if (strcmp (s, "compact") == 0) x = O_COMPACT;
>      else if (strcmp (s, "perimeter") == 0) x = O_PERIMETER;
> +    else if (strcmp (s, "slope") == 0) x = O_SLOPE;
>  
>      return x;
>  }
> Index: vector/v.to.db/report.c
> ===================================================================
> RCS file: /grassrepository/grass6/vector/v.to.db/report.c,v
> retrieving revision 1.11
> diff -u -r1.11 report.c
> --- vector/v.to.db/report.c	9 Feb 2006 03:09:07 -0000	1.11
> +++ vector/v.to.db/report.c	7 Dec 2006 16:21:18 -0000
> @@ -66,6 +66,13 @@
>  		for ( i = 0; i < vstat.rcat; i++ )
>  		    fprintf (stdout, "%d|%.15g\n", Values[i].cat, Values[i].d1);	        
>  	    }
> +	    break;
> +        case O_SLOPE:
> +	    fprintf (stdout,"cat|slope\n");
> +	    for ( i = 0; i < vstat.rcat; i++ )
> +		fprintf (stdout, "%d|%.15g\n", Values[i].cat, Values[i].d1);
> +
> +
>              break;
>  
>          case O_COOR:
> Index: vector/v.to.db/update.c
> ===================================================================
> RCS file: /grassrepository/grass6/vector/v.to.db/update.c,v
> retrieving revision 1.17
> diff -u -r1.17 update.c
> --- vector/v.to.db/update.c	9 Feb 2006 03:09:07 -0000	1.17
> +++ vector/v.to.db/update.c	7 Dec 2006 16:21:18 -0000
> @@ -49,6 +49,7 @@
>  	case O_QUERY:
>  	case O_COMPACT:
>  	case O_PERIMETER:
> +        case O_SLOPE:
>  	    sprintf (buf1, "update %s set %s =", Fi->table, options.col[0]);
>              break;
>          case O_COOR:
> @@ -79,6 +80,7 @@
>  	    case O_AREA:
>  	    case O_COMPACT:
>  	    case O_PERIMETER:
> +	    case O_SLOPE:
>      		sprintf (buf2, "%s %f where %s = %d", buf1, Values[i].d1, Fi->key,  Values[i].cat);
>          	break;
>  




> _______________________________________________
> grass-dev mailing list
> grass-dev at grass.itc.it
> http://grass.itc.it/mailman/listinfo/grass-dev

-- 
Jachym Cepicky
e-mail: jachym.cepicky at centrum.cz
URL: http://les-ejk.cz
GPG: http://www.les-ejk.cz/pgp/jachym_cepicky-gpg.pub
-----------------------------------------   
OFFICE:                                     
Department of Geoinformation Technologies 
Zemedelska 3
613 00, Brno
Czech Republick
e-mail: xcepicky at node.mendelu.cz
URL:    http://mapserver.mendelu.cz
Tel.:   +420 545 134 514
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://lists.osgeo.org/pipermail/grass-dev/attachments/20061211/d1db5b78/attachment.bin


More information about the grass-dev mailing list