[GRASS-user] r.update

Dave Roberts dvrbts at ecology.msu.montana.edu
Wed Jan 1 14:11:05 PST 2014


Hi Anna,

On 01/01/2014 01:50 PM, Anna Petrášová wrote:
> Hi Dave,
>
>
>> On Wed, Jan 1, 2014 at 3:10 PM, Dave Roberts
>> <dvrbts at ecology.msu.montana.edu <mailto:dvrbts at ecology.msu.montana.edu>>
>> wrote:
>>
>>     Friends,
>>
>>          After some alternative approaches to a simple problem of
>>     compositing rasters (see previous posts, esp. compositing rasters @9:32)
>>     I developed a very crude function to update rasters
>>
>>     r.update target mask x y
>>
>>     updates raster target by substituting y everywhere that raster mask
>>     has x.  A more GRASS-like syntax would be
>>
>>     r.update target=string mask=string current=integer replace=integer
>>
>
> I'm not sure if I don't miss anything but why don't you use r.mapcalc
> expression like this:
>
> new = if(mask == x, y, target)
>
> and then
>
> g.rename new,target --overwrite
>
well probably because I'm not too bright.  Obviously your elegant 
solution would allow multiple sequential updates just the way I needed 
as long as I do the rename --overwrite very time.  I knew there had to e 
GRASS way to do this, I just hadn't figured it out yet.

Thanks!

> Anna
>
>
>     but my bash skills are pretty limited and I elected (for the time
>     being) not to parse the arguments that way.  The current function
>     relies on a short bash script and a FORTRAN executable.  The crude
>     part is exporting both the target an mask rasters as ascii exports,
>     creating a new ascii file, and doing an r.in.ascii to bring the
>     updated raster back in.  It only works (at present) for integer
>     rasters, but it's intended for thematic maps, so that seems OK.
>
>     r.update.sh <http://r.update.sh> just below.
>
>     r.out.ascii inp=$1 out=$1.asc null=-1
>     r.out.ascii inp=$2 out=$2.asc null=-1
>     g.remove rast=$1
>     r_update $1.asc $2.asc $3 $4
>     r.in.ascii  inp=tmp.file out=$1 nv=-1
>     rm $1.asc
>     rm $2.asc
>     rm tmp.file
>
>     You have to "alias r_update 'sh r_update.sh'" or name the script
>     r.update and chmod +x r.update to make it run as shown.
>
>     The FORTRAN code for r_update is at
>
>     ecology.msu.montana.edu/GRASS/__r_update.f90
>     <http://ecology.msu.montana.edu/GRASS/r_update.f90>
>
>     The code compiles with gfortran.  The executable must be in your
>     path, or you can modify the bash script with a full path to it.
>
>          It is my sincere hope that someone with GRASS chops will write
>     a function for g.extension that uses the API and avoids all this
>     ascii input and output, but this serves as a demo and useful (if
>     clumsy) approach in the meantime.
>
>     Dave
>     --
>     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~__~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~__~~~~~~~~~~~~
>     David W. Roberts                                     office
>     406-994-4548 <tel:406-994-4548>
>     Professor and Head                                      FAX
>     406-994-3190 <tel:406-994-3190>
>     Department of Ecology                         email
>     droberts at montana.edu <mailto:droberts at montana.edu>
>     Montana State University
>     Bozeman, MT 59717-3460
>     _________________________________________________
>     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
>     <http://lists.osgeo.org/mailman/listinfo/grass-user>
>
>

-- 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
David W. Roberts                                     office 406-994-4548
Professor and Head                                      FAX 406-994-3190
Department of Ecology                         email droberts at montana.edu
Montana State University
Bozeman, MT 59717-3460


More information about the grass-user mailing list