[Grass-de] Raster-rechnen

Tom Gottfried tom.gottfried at wzw.tum.de
Fr Okt 2 10:58:52 CEST 2009


Du kannst in der Shell einer Variable einen Wert zuweisen

y=3

und auf diesen dann mit

$y

zugreifen.

Tom

Martin Schweizer schrieb:
> Hallo Tom
> 
> Vielen Dank für den Hinweis. Ja, r.mapcalc kenne ich. Ich habe damit
> auch schon herumgespielt. Ein wirklich tolles Teil (Vorallem jetzt auch
> mit dem GUI in QGis). Ich habe dafür auch mal versucht ein Skript zu
> schreiben:
> 
> Endkarte = (
> 
> if(Siedlungsraster1,(
> 
> # Wenn eine Zelle auf dem Siedlungsraster1 nicht 0 ist, dann:
> 
>  
> if((Landwirtschaftsraster[-1,0])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[-1,1])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[0,1])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[1,1])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[1,0])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[1,-1])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[0,-1])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)||
>  
> if((Landwirtschaftsraster[-1,-1])&&(Endkarte<5),y+Landwirtschaftsraster&&6,Endkarte)),Endkarte)
> 
> #Wenn die Zellen [-1,0 etc.] auf dem Landwirtschaftsraster nicht 0 sind
> und auf der Endkarte nicht über 5 sind, dann addiere den Zellenwert der
> Variable y und gib der Zelle auf der Endkarte den Wert 6. #Wenn nicht,
> übernehme den Wert der Endkarte. Wenn auf dem Siedlungsraster NULL ist,
> übernehme den Wert der Endkarte.
> 
> Siedlungsraster1 - y
> 
> # Subtrahiere den kumulierten Wert der Zellen des Landwirtschaftsrasters
> die auf der Endkarte mit 6 markiert wurden vom Siedlungsraster
> 
> )
> 
> End
> 
> (Ist jetzt hier der Übersichtlichkeitshalber mit Zeilentrenner
> dargestellt ;-) ).
> 
> 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). Weiss jemand
> ob es irgend eine Möglichkeit gibt, in Mapcalc mit Variablen zu arbeiten
> (in meinem Beispiel "y")? Oder sieht jemand eine Möglichkeit, das ganze
> ohne Variable zu rechnen?
> 
> Vielen Dank noch einmal und ein schönes Wochenende
> 
> Martin
> 
> Tom Gottfried schrieb:
>> Hallo Martin,
>>
>> vielleicht in nützlicher Hinweis: r.mapcalc
>>
>> Tom
>>
>> Am 28.09.2009 um 13:52 schrieb Martin Schweizer:
>>
>>> Liebe Liste
>>>
>>> Ich habe ein etwas komplizierteres Problem. Es handelt sich um
>>> folgendes: Ich habe eine Rasterkarte (rast1), auf welcher einzelne
>>> Punkte einen bestimmten Wert haben. Dieser Wert gibt an, wie viele
>>> Rasterzellen um diesen Punkt herum "markiert" werden müssen. Dann habe
>>> ich eine andere Rasterkarte (rast2), welche angibt, wie viel "Wert" (von
>>> 1 - 4) diese Zellen haben. Nun sollte eine neue Rasterkarte entstehen,
>>> auf welcher Zellen auf den Wert 5 gesetzt werden im Wert der auf rast1
>>> angegebenen Zahl.
>>> Beispiel: Auf Rast1 hat eine Zelle den wert 17. Auf Rast2 haben die
>>> Zellen um diese Zelle von Rast1 herum Werte zwischen 1 und 4. Nun sollen
>>> so viele Zellen um diese Zelle auf Rast1 herum markiert werden (auf 5
>>> gesetzt), bis die Werte all dieser Zellen auf Rast2 (2 + 2 + 1 + 4 +
>>> ....) den Wert 17 ergibt. Dann soll auf Rast1 weiter gefahren werden
>>> (Sind insgesamt 245 Punkte).
>>>
>>> Rast1:
>>>
>>> 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 17  0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0
>>>
>>> Rast2:
>>>
>>> 2 2 2 1 1 1 2 2 3
>>> 0 1 1 1 2 2 2 3 3
>>> 0 0 1 2 2 2 2 2 3
>>> 0 2 2 1 1 1 3 3 3
>>> 0 0 3 4 4 1 1 1 1
>>>
>>> Endkarte:
>>>
>>> 0 0 0 0 0 0 0 0 0 0
>>> 0 0 0 5 5 5 0 0 0 0
>>> 0 0 5 5 5 5 5 0 0 0
>>> 0 0 0 5 5 5 0 0 0 0
>>> 0 0 0 0 0 0 0 0 0 0
>>>
>>>
>>> Habt ihr irgend eine Lösung (oder Hinweise), wie ich das machen könnte?
>>>
>>> Vielen Dank und viele Grüsse
>>>
>>> Martin
>>> _______________________________________________
>>> Grass-de-liste mailing list
>>> Grass-de-liste at fossgis.de
>>> https://lists.fossgis.de/mailman/listinfo/grass-de-liste
>>

-- 
Technische Universität München
Department für Pflanzenwissenschaften
Lehrstuhl für Grünlandlehre
Am Hochanger 1
85350 Freising / Germany
Phone: ++49 (0)8161 715324
Fax:   ++49 (0)8161 713243
email: tom.gottfried at wzw.tum.de
http://www.wzw.tum.de/gruenland