[Grass-de] Raster-rechnen

Martin Schweizer schweizermartin at students.unibe.ch
Do Okt 1 23:45:00 CEST 2009


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