[Grass-de] Raster-rechnen

Martin Schweizer schweizermartin at students.unibe.ch
So Okt 4 22:54:41 CEST 2009


Hallo Markus

Vielen Dank für diese Hilfe. Wenn ich das richtig verstehe kann man
innerhalb der Klammer von eval() sowohl Variablen definieren, wie auch
Operationen ausführen. Das wird aber irgendwie hier
(http://grass.itc.it/grass64/manuals/html64_user/r.mapcalc.html) ganz
anders dargestellt:

"eval([x,y,...,]z)       evaluate values of listed expr, pass results to z"

Nun, ich habe nun mal ein "eval()" in mein Script eingebaut, leider
funktioniert das ganze noch immer nicht. Ich glaube ein "mapcalc-Profi"
sieht das Problem wahrscheinlich sofort, aber ich sehe es einfach nicht
(und ich habe doch einiges herumprobiert... ;-) ). Hier das Script:

r.mapcalc
eval(y=0, test=(if(Siedlungsflaeche,\e
(if((Eignung42[-1,0])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[-1,1])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[0,1])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[1,1])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[1,0])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[1,-1])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[0,-1])&&(test<5),($y+Eignung42)&&6,test)||\e
if((Eignung42[-1,-1])&&(test<5),($y+Eignung42)&&6,test)\e
),0)), \e
Siedlungsflaeche-$y)
end

Und hier das Resultat:

GRASS 6.4.0RC5 (Romanum5):~ > r.mapcalc
Enter expressions, "end" when done.
mapcalc> eval(y=0, test=(if(Siedlungsflaeche,\e
syntax error, unexpected '(', expecting '='
mapcalc> (if((Eignung42[-1,0])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[-1,1])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[0,1])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[1,1])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[1,0])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[1,-1])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[0,-1])&&(test<5),($y+Eignung42)&&6,test)||\e
mapcalc> if((Eignung42[-1,-1])&&(test<5),($y+Eignung42)&&6,test)\e
mapcalc> ),0)), \e
mapcalc> Siedlungsflaeche-$y)
mapcalc> end
Parse error

GRASS 6.4.0RC5 (Romanum5):~ >

Vielen Dank schon im Voraus und eine schöne neue Woche

Martin

Markus Neteler schrieb:
> 2009/10/1 Martin Schweizer <schweizermartin at students.unibe.ch>:
> ...
>   
>> Nun, das Hauptproblem das ich habe ist, dass mapcalc keine Variablen
>> kennt. Ich kann also nicht etwas in eine Variable schreiben und das dann
>> irgendwann von irgend einer Zelle subtrahieren (oder so).
>>     
> ...
>
> Doch, kenn es :) Es geht mit eval():
>
> GRASS 6.4.0svn (spearfish60): > r.mapcalc "neu = eval(x=42, y=1, x*y )"
>  100%
> GRASS 6.4.0svn (spearfish60): > r.info -r neu
> min=42
> max=42
>
> Oder mit Kartennamen (das Beispiel ist Unsinn):
> GRASS 6.4.0svn (spearfish60): > r.mapcalc "neu = eval(x=soils,
> y=elevation.10m, x*y )"
>  100%
> GRASS 6.4.0svn (spearfish60): > r.info -r neu
> min=1085.223877
> max=89216.295427
>
> Du koenntest "Landwirtschaftsraster" etc. also huebsch mit L abkuerzen,
> um alles Lesbar zu halten.
>
> Ansonsten mit Shell Variables, wie in der anderen Email geschrieben.
>
> Gruesse
> Markus
>
>