[GRASS-dev] Re: [GRASS GIS] #739: v.mkgrid parameter needs two values but is multiple=NO

Roger Bivand Roger.Bivand at nhh.no
Tue Sep 1 15:50:06 EDT 2009


On Tue, 1 Sep 2009, GRASS GIS wrote:

> #739: v.mkgrid parameter needs two values but is multiple=NO
> --------------------------+-------------------------------------------------
>  Reporter:  rsbivand     |       Owner:  grass-dev at lists.osgeo.org
>      Type:  defect       |      Status:  new
>  Priority:  normal       |   Milestone:  6.4.0
> Component:  Vector       |     Version:  6.4.0 RCs
> Resolution:               |    Keywords:
>  Platform:  Unspecified  |         Cpu:  Unspecified
> --------------------------+-------------------------------------------------
> Comment (by neteler):
>
> Replying to [ticket:739 rsbivand]:
> > When run from the command line, v.mkgrid map=xxx grid=100,50 works
> (main.c, line 74), but in wxpython and execGRASS() in spgrass6 in R, the
> --interface-description of grid->multiple = NO is respected, and only one
> value can be passed. This then fails (in wxpython here) with:
> >
> >
> > {{{
> > v.mkgrid --overwrite map=grd grid=100
> > ERROR: option <grid> must be provided in multiples of 2
> >        You provided 1 items:
> >        100
> > }}}
>
>
> Yes, it must be 100,100 (the user has to specify two values).
>
> > In R (using --interface-description):
> >
> >
> > {{{
> > > execGRASS("v.mkgrid", flags="overwrite", parameters=list(map="grd",
> grid=as.integer(100)))
> >
> > ERROR: option <grid> must be provided in multiples of 2
> >        You provided 1 items:
> >        100
> >
> > }}}
>
> here you need to use
>
> ... grid=paste(as.integer(100), as.integer(100), sep=",")

No,

> execGRASS("v.mkgrid", flags="overwrite", parameters=list(map="grd",
    grid=paste(as.integer(100), as.integer(100), sep=",")))
Error in doGRASS(cmd, flags = flags, parameters = parameters) :
   Parameter <grid> does not have integer value

because doGRASS() checks the type, and with c(as.integer(100),
   as.integer(100)) would concatenate correctly with a comma.

The problem is in the wrong setting of grid->multiple as NO, which simply 
isn't examined from the command line. The wxpython GUI version has exactly 
the same problem.

Thanks for checking!

Roger

>
> > or:
> >
> >
> > {{{
> > > execGRASS("v.mkgrid", flags="overwrite", parameters=list(map="grd",
> grid=rep(as.integer(100), 2)))
> > Error in doGRASS(cmd, flags = flags, parameters = parameters) :
> >   Parameter <grid> has multiple values
> > }}}
>
> Yes, because
> {{{
> > rep(as.integer(100), 2)
> [1] 100 100
> }}}
>
> which is space but not comma separated. Indeed you need to use:
>
> {{{
> > paste(as.integer(100), as.integer(100), sep=",")
> [1] "100,100"
> }}}
>
>
> > This conflicts with the single comma in grid->key_desc, which implies
> two values, but grid->multiple = NO. The same seems to apply to box=. It
> looks as though there is no conflict on the command line when multiple =
> NO provided that the number of values agrees with # commas in key_desc
> plus one, but that this does not work when --interface description is
> used.
>
> I don't think that this is a conflict: two comma separated values are
> taken as one "string".
> Instead, e.g. in r.series, multiple input maps are possible which are
> multiple = YES, hence,
> they are treated as separate tokens.
>
>

-- 
Roger Bivand
Economic Geography Section, Department of Economics, Norwegian School of
Economics and Business Administration, Helleveien 30, N-5045 Bergen,
Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43
e-mail: Roger.Bivand at nhh.no



More information about the grass-dev mailing list