[GRASS-user] Concatenate raster values

Nikos Alexandris nik at nikosalexandris.net
Tue May 30 09:29:24 PDT 2017


* Moritz Lennert <mlennert at club.worldonline.be> [2017-05-30 18:00:59 +0200]:

>Le Tue, 30 May 2017 17:34:59 +0200,
>Nikos Alexandris <nik at nikosalexandris.net> a écrit :
>
>> Dear community,
>>
>> is it possible to concatenate raster pixel values using r.mapcalc
>> or/and existing modules?
>
>Pixel values are numerical by definition, so I wouldn't think so.

It would be convenient, in some cases, I think. Think, somehow, of r.cross but
instead of assigning a new category value, a/the combination would be a
concatenation of the input (integers in this case, to make it simple)
raster values.


>> Something like the following examples
>>
>> - expression = "product_20 = concatenate(20, input_map)":  a value of
>> 88 in the "input_map" would mean the value 2088 (or 20088) in the
>> output "product_20" map.
>
>Just find out what the highest value your input map and go to an order
>of magnitude high enough to do this (i.e. if max(input_map)<100):
>
>"expression = product20 = 2000 + input_map"

I've thought of that, as I have read it elsewhere. Yet, I rejected it
because I want to combine (maybe too) many maps together and still be
able to read fast the original values of the input maps.  Maybe I should
study it more.

Perhaps I should name the `input_map` in the examples more precisely,
say: input_map_20, input_map_25, et.c.

This is experimental work.  My actual goal is to retain all input values
from all input maps in as few as possible, or one if possible, map.

I was thinking of something like bit patterns, much like the QA bands of
Landsat products work, but it'd be perhaps more complicated to work
with.


>> - expression = "product_25 = concatenate(25, input_map)":  a value of
>> 13 in the "input_map" would result in the value 2513 (or 25013) in
>> the output "product_25" map.
>>
>> - expression = "product_nb = concatenate( product_20, product_25):
>> finally, the output pixel value, derived from the above examples,
>> would be "2008825013".
>
>product_nb = product_20 * 10000 + product_25
>
>?

I've found that I can play with the mapcalc's '@' operator, to get the
category labels assigned as raster values (when they are integers).

For example, the cat/label rules

0:
6:2006
13:20013
19:20019

would give a map with the labels in place of the cat values after

expression = "product_20 = @input_map_20"

If I repeat this for all of the different, yet similar, input maps, and,
then, combine again in the end the products... ?

Thank you Moritz, Nikos


More information about the grass-user mailing list