[GRASS-user] r.rescale categories definition
Glynn Clements
glynn at gclements.plus.com
Sat Dec 12 11:59:02 EST 2009
Aldo Clerici wrote:
> Dear GRASS Users and Developers,
> I'm having some problem in understanding the categories resulting from
> r.rescale
>
> With:
> r.rescale in=elevation.dem from=1200,1500 to=1,2 out=elev.resc
>
> I have this result:
> 1 1200 thru 1349
> 2 1350 thru 1500
>
> Two categories with a range of 150 meters each.
>
> But with a new three categories subdivision:
> r.rescale in=elevation.dem from=1200,1500 to=1,3 out=elev.resc
> the result is:
> 1 1200 thru 1274
> 2 1275 thru 1424
> 3 1425 thru 1500
>
> The first and last categories have a range of 75 meters and the second one
> of 150 meters.
>
> Similar result with a four categories subdivision:
> r.rescale in=elevation.dem from=1200,1500 to=1,4 out=elev.resc
>
> 1 1200 thru 1250
> 2 1251 thru 1350
> 3 1351 thru 1450
> 4 1451 thru 1500
>
> Categories 1 and 4 have a range of 50 meters, 2 and 3 a range of 100 meters.
>
> It seems that the first and last categories have the half range of all the
> others ones. Is this correct? Shouldn't the range be the same for all
> categories?
This is a result of r.rescale rounding rather than truncating, so the
minimum and maximum input values are the midpoints of the first and
last intervals:
old_delta = old_max - old_min;
new_delta = new_max - new_min;
divisor = (float)new_delta / (float)old_delta;
...
for (cat = old_min; cat <= old_max; cat++) {
value = (int)(divisor * (cat - old_min) + new_min + .5);
You can get balanced intervals with:
#!/bin/sh
inmap=$1
outmap=$2
to_min=$3
to_max=$4
eval `r.info -r $inmap`
awk -vold_min=$min -vold_max=$max -vnew_min=$to_min -vnew_max=$to_max '
BEGIN {
new_delta = new_max - new_min + 1
old_delta = old_max - old_min + 1
for (i = 0; i < new_delta; i++) {
lo = old_min + i * old_delta / new_delta
hi = old_min + (i+1) * old_delta / new_delta - 1
new = new_min + i
printf("%d thru %d = %d %d\n", lo, hi, new, lo)
}
}' | r.reclass in=$inmap out=$outmap
E.g.:
./rescale.sh elevation.dem elev.resc 1 4
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-user
mailing list