<div dir="ltr">Nice suggestions Moritz. Another alternative to accomplish this is to combine r.surf.random and r.recode (instead of recode, one can also use r.reclass). I haven't tried it, but this might be faster for large maps or with many categories? <br><br>r.surf.random flags=i, output=LUCrandom min=0 max=10000<br>r.recode input=LUCrandom output=LUCrandom2 << EOF<br>    0:2931:1<br>    2932:3017:2<br>    3018:4041:3<br>    4042:4716:4<br>    4717:9780:5<br>    9781:9993:6<br>    9994:10000:7<br>EOF<br>    <br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Dec 9, 2014 at 3:55 PM, Moritz Lennert <span dir="ltr"><<a href="mailto:mlennert@club.worldonline.be" target="_blank">mlennert@club.worldonline.be</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 08/12/14 18:26, Milton Ribeiro wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi all,<br>
<br>
I have a landcover maps, and I need to randomize the position of them,<br>
keeping all the pixels on the new raster map.<br>
</blockquote>
<br></span>
IIUC, you actually want to randomize the categories of pixels where categories are land covers and there is a constraint that you want to keep the same number of pixels per category. Is that correct ?<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Is there a command that can do this within GRASS?<br>
</blockquote>
<br></span>
You could use r.random following a procedure something like this:<br>
<br>
create a raster (mymask) where all cells are non-null<br>
<br>
for each category of land cover,<br>
        get cat and percentage of cover of that cat (e.g. via r.stats)<br>
        run r.random, using cover=mymask and n=percentage of cover<br>
        modify mymask so that the cells attributed in the previous run of r.random get set to null to make them unavailable in the next run<br>
<br>
There is just one issue: the cover option in r.random provokes a check if the randomly selected cell is in the cover area or not. If not, it is not used, but no replacement is found, so if you use cover= the percentage value in n= is not respected... Ideally this should be corrected to while cell number X is not within the cover, find a new cell. See [1] for an old discussion about this.<br>
<br>
Attached is a bash script that tries to work around this issue and works more or less for me (at least with the "landuse dataset in the simplified NC dataset). Certainly not perfect, but maybe you can build on that.<br>
<br>
Another option might be something like this:<br>
<br>
Knowing that:<br>
<br>
r.stats -ncp landuse --quiet<br>
1 73077 29.31%<br>
2 2137 0.86%<br>
3 25518 10.24%<br>
4 16829 6.75%<br>
5 126265 50.64%<br>
6 5303 2.13%<br>
7 194 0.08%<br>
<br>
use the random generator in r.mapcalc<br>
<br>
r.mapcalc "eval(random = rand(0.0,1.0)); landuse_randomized_mapcalc = if(random<=0.2931,1, if(random>0.2931 && random <=0.3017,2,if(random>0.3017 && random <=0.4041, 3, if(random>0.4041 && random<=0.4716, 4, if(random > 0.4716 && random <=0.9780, 5, if(random>0.9780 && random <=0.9993, 5, 6))))))"  --o<br>
<br>
The result is not perfect in terms of cell counts, but close:<br>
<br>
r.stats -ncp landuse_randomized_mapcalc --quiet<br>
1 73402 29.46%<br>
2 2061 0.83%<br>
3 25215 10.12%<br>
4 16982 6.82%<br>
5 131484 52.78%<br>
6 180 0.07%<br>
<br>
<br>
Moritz<br>
<br>
[1] <a href="https://trac.osgeo.org/grass/ticket/1082" target="_blank">https://trac.osgeo.org/grass/<u></u>ticket/1082</a><br>
        <br>
<br>
<br>
<br>
<br>_______________________________________________<br>
grass-user mailing list<br>
<a href="mailto:grass-user@lists.osgeo.org">grass-user@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/grass-user" target="_blank">http://lists.osgeo.org/mailman/listinfo/grass-user</a><br></blockquote></div><br></div>