[GRASS-user] Using a variable inside GRASS commands with Python code/ grass.mapcalc
S. Koukoulas (lists)
sotkouklistes at gmail.com
Tue Jan 8 09:19:47 PST 2013
Well, not a python solution, but you might find it useful.
In Windows you could try the shell (command prompt) there as well:
First get a list of your observers in a file, say obspoints.txt
v.out.ascii input=myobs at user output=c:\obspoints.txt fs=, dp=2
then run the shell's FOR command (run a help for more on the syntax)
ALL must run in ONE LINE (and you must be running Grass in from the
command prompt should be somewhere in the menu):
FOR /F "tokens=1,2,3 delims=, " %i in (obspoints.txt) do r.los
--overwrite input=mydtm at user output=obs%k coordinate=%i,%j
(here tokens are the columns, X,Y,ID - and replace r.los with the newer
r.viewshed)
Then use g.mlist to make a list of your files
g.mlist pattern=’obs*’ mapset=user sep=,
and use the output of the list with r.series (method=sum) to get what
you want.
r.series --overwrite input=amap,bmap,... output=outshed method=sum
(in r.series manual page, it is suggested that you could use g.mlist
inside r.series but I have not managed to do it correctly -maybe someone
can explain better the use of quotes?)
HTH
sotiris
On 01/08/2013 06:53 PM, Brian Sanjeewa Rupasinghe wrote:
> Hi,
>
> Thanks again. Since i use GRASS 7.0, it will not work there. I do not
> think it can either be installed in GRASS for Windows through Add-on
> extensions. What about using grass.mapcalc to integrate each viewshed
> if there is a method of handling variables in it? If not how about
> using r.series with sum? Your advice is appreciated since i am
> pretty new to GRASS.
>
> On Tue, Jan 8, 2013 at 9:19 PM, Leonidas Liakos
> <leonidas_liakos at yahoo.gr <mailto:leonidas_liakos at yahoo.gr>> wrote:
>
> Do you need cumulative viewshed analysis?
> Maybe r.cva is for you:
> http://www.ucl.ac.uk/~tcrnmar/GIS/r.cva.html
> <http://www.ucl.ac.uk/%7Etcrnmar/GIS/r.cva.html>
>
> ------------------------------------------------------------------------
> *Απο:* Brian Sanjeewa Rupasinghe <jinkabs at gmail.com
> <mailto:jinkabs at gmail.com>>
> *Προς:* Anna Kratochvílová <kratochanna at gmail.com
> <mailto:kratochanna at gmail.com>>; grass-user at lists.osgeo.org
> <mailto:grass-user at lists.osgeo.org>
> *Στάλθηκε:* 2:45 μ.μ. Τρίτη, 8 Ιανουαρίου 2013
> *Θέμα:* Re: [GRASS-user] Using a variable inside GRASS commands
> with Python code/ grass.mapcalc
>
> Hi,
>
> Many thanks. It worked for me. Then i have a similar problem in
> GRASS.mapcalc. What i need next is to add viewshed of each
> observer location cumulatively while looping through the observer
> locations in order to have final integrated viewshed analysis map.
> So i used the following command in Python (some code ommitted)
>
> for i in:
> grass.run_command('r.viewshed', input = rinput, output =
> 'viewshed', coordinate = [x,y], obs_elev = oelv, tgt_elev = th,
> memory = 4098, flags = 'b', overwrite = True, quiet = True)
>
> grass.mapcalc("viewshed_cum = viewshed + viewshed_cum", overwrite
> = True, quiet = True)
>
> It seems that expressions like sum = c + sum does not work inside
> grass.mapcalc.Is <http://grass.mapcalc.is/> there any alternative
> or other way around to get this done? I am using GRASS 7 in Windows 7.
>
> Cheers, Brian
>
> On Tue, Jan 8, 2013 at 1:25 PM, Anna Kratochvílová
> <kratochanna at gmail.com <mailto:kratochanna at gmail.com>> wrote:
>
> Hi Brian,
>
> On Tue, Jan 8, 2013 at 6:51 AM, Brian Sanjeewa Rupasinghe
> <jinkabs at gmail.com <mailto:jinkabs at gmail.com>> wrote:
> > Hi all
> >
> > I am generating viewshed of each observer location by
> iterating through a
> > set of observer coordinate file through
> > Python code in Windows 7 . Below is the python command used
> in grass for
> > each iteration. According to this, each time
> > loop iterates, output is overwritten with the same name. Now
> what i need is
> > to keep each output of all the observer locations. For this,
> i need to
> > concatanate output name (i.e. 'viewshed' with loop index i
> which will be
> > 'viewshed' + str(i) ). How is that possible within
> > this grass.run_command?
> >
>
> just set a variable within each loop and use it in the
> run_command:
> for i in ... :
> out = 'viewshed' + str(i)
> grass.run_command('r.viewshed', input = rinput, output = out, ...)
>
>
> Regards,
> Anna
>
> > grass.run_command('r.viewshed', input = rinput, output =
> 'viewshed',
> > coordinate = [x,y], obs_elev = oelv, tgt_elev = th, memory =
> 4098, flags =
> > 'b', overwrite = True, quiet = True)
> >
> > Cheers, Brian
> >
> > _______________________________________________
> > grass-user mailing list
> > grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
> > http://lists.osgeo.org/mailman/listinfo/grass-user
> >
>
>
>
> _______________________________________________
> grass-user mailing list
> grass-user at lists.osgeo.org <mailto:grass-user at lists.osgeo.org>
> http://lists.osgeo.org/mailman/listinfo/grass-user
>
>
>
>
>
> _______________________________________________
> grass-user mailing list
> grass-user at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/grass-user
More information about the grass-user
mailing list