[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
>
>