[GRASS-user] Can a table imported in the data base (sqlite.db)
used to assign new raster category labels non-interactively?
Nikos Alexandris
nikos.alexandris at felis.uni-freiburg.de
Tue Mar 18 07:38:25 EDT 2008
On Mon, 2008-03-17 at 22:42 -0700, Hamish wrote:
> Nikos Alexandris wrote:
> > I am having a hard time to figure out how I could avoid to enter
> > interactively new labels for a raster map. I've been reading the last 2
> > hours in the list, in GRASS-Book.
> >
> > Any directions highly appreciated.
> ....
> > Question: IS there a way to add these labels to the raster map
> > non-interactively?
>
>
> In GRASS 6.3 use 'r.category rules=filename'. See the help page.
> (new option added in October; may not have filtered into all the docs
> yet)
Yep, this is what I was trying. A fragment from my history (yesterday
before posting) confirms my attempts - I really tried hard... ;-P
history | grep r.cat
95 r.cats help
96 r.category help
97 r.category
98 r.category map=glc2000_eu cats=glc2000_legend fs=|
99 r.category map=glc2000_eu cats=glc2000_legend fs="|"
100 r.category map=glc2000_eu cats=glc2000_legend
286 r.category
290 r.cats map=glc2000_eu rules=`db.select glc2000_legend`
294 r.cats map=glc2000_eu rules=`db.select -c glc2000_legend`
296 r.cats map=glc2000_eu fs=| rules=`db.select -c glc2000_legend`
302 r.cats map=glc2000_eu fs=| rules=`db.select -c glc2000_legend |
tr "|" ":"`
304 r.cats map=glc2000_eu rules=`db.select -c glc2000_legend | tr "|"
":"`
305 r.cats map=glc2000_eu rules=`db.select -c glc2000_legend`
306 r.cats map=glc2000_eu fs="|" rules=`db.select -c glc2000_legend`
307 r.cats map=glc2000_eu fs=| rules=`db.select -c glc2000_legend`
308 r.cats map=glc2000_eu fs=| rules=`db.select -c glc2000_legend`
--v
309 r.cats map=glc2000_eu fs=| rules=`db.select -c glc2000_legend`
--V
310 r.cats --v map=glc2000_eu fs=| rules=`db.select -c
glc2000_legend`
316 r.cats glc2000_eu
>
>
> In GRASS 6.2 you can put a similar ASCII text file in the $MAPSET/cats/
> dir, see the Programmers' manual or another map to get the format.
>
>
>
> > *Looking at the imported table
> > db.select -c glc2000_legend
> > 1|Tree Cover, broadleaved, evergreen
> > 2|Tree Cover, broadleaved, deciduous, closed
> > 3|Tree Cover, broadleaved, deciduous, open
> > 4|Tree Cover, needle-leaved, evergreen
> > 5|Tree Cover, needle-leaved, deciduous
> > 6|Tree Cover, mixed leaf type
> > 7|Tree Cover, regularly flooded, fresh water
> > 8|Tree Cover, regularly flooded, saline water
> > 9|Mosaic: Tree Cover / Other natural vegetation
> > 10|Tree Cover, burnt
> > 11|Shrub Cover, closed-open, evergreen
> > 12|Shrub Cover, closed-open, deciduous
> > 13|Herbaceous Cover, closed-open
> > 14|Sparse herbaceous or sparse shrub cover
> > 15|Regularly flooded shrub and/or herbaceous cover
> > 16|Cultivated and managed areas
> > 17|Mosaic: Cropland / Tree Cover / Other natural vegetation
> > 18|Mosaic: Cropland / Shrub and/or grass cover
> > 19|Bare Areas
> > 20|Water Bodies
> > 21|Snow and Ice
> > 22|Artificial surfaces and associated areas
> > 23|Irrigated Agriculture
>
>
> it is very close, just `tr '|' ':'` or `sed -e 's/|/:/'`.
> Hopefully ":" in the label names won't cause a problem.
The result from both is the same:
r.category map=glc2000_eu rules=`db.select -c glc2000_legend | tr '|'
':'`
or
r.category map=glc2000_eu rules=`db.select -c glc2000_legend | sed -e
's/|/:/'`
output:
Sorry <Cover,> is not a valid option
Sorry <broadleaved,> is not a valid option
Sorry <evergreen> is not a valid option
Sorry <2:Tree> is not a valid option
Sorry <Cover,> is not a valid option
Sorry <broadleaved,> is not a valid option
Sorry <deciduous,> is not a valid option
Sorry <closed> is not a valid option
Sorry <3:Tree> is not a valid option
Sorry <Cover,> is not a valid option
Sorry <broadleaved,> is not a valid option
Sorry <deciduous,> is not a valid option
Sorry <open> is not a valid option
Sorry <4:Tree> is not a valid option
Sorry <Cover,> is not a valid option
Sorry <needle-leaved,> is not a valid option
Sorry <evergreen> is not a valid option
Sorry <5:Tree> is not a valid option
Sorry <Cover,> is not a valid option
Sorry <needle-leaved,> is not a valid option
Sorry <deciduous> is not a valid option
Sorry <6:Tree> is not a valid option
Sorry <Cover,> is not a valid option
Sorry <mixed> is not a valid option
Sorry <leaf> is not a valid option
Sorry <type> is not a valid option
Sorry <7:Tree> is not a valid option
Sorry <Cover,> is not a valid option
Sorry <regularly> is not a valid option
Sorry <flooded,> is not a valid option
Sorry <fresh> is not a valid option
Sorry <water> is not a valid option
Sorry <8:Tree> is not a valid option
[...]
>
Finally it worked like this:
1. db.select -c glc2000_legend | tr '|' ':' > glc2000_legend.csv
2. r.category map=glc2000_eu rules=glc2000_legend.csv
> ("TODO: Respect the fs= field separator setting for input rules.")
>
>
> Also for GRASS 7 it would be nice to use a consistent fs for all modules,
> instead of sometimes |,:,space, ...
Why not directly from the db.table(s)
Given that the category numbers and labels are there as they should be
(in a table imported in the data base), wouldn't it be nice to enable
attachment of such tables in a raster map?
>
>
> Hamish
Cheers and THANKS!!!
Nikos
More information about the grass-user
mailing list