[Fossgis-talk] mapcalc - hydrologische Formel

Martin Schweizer schweizermartin at students.unibe.ch
Fr Okt 16 12:58:28 CEST 2009


Liebe Leute

Folgendes Problem: Ich habe eine Hydrologische Formel für r.mapcalc:

(wasser= Rasterkarte mit Anfangs Wasserständen, elev=Höhenraster)

wasser = wasser+eval(x=elev+wasser,\

if(x>(y=elev[-1,0]+wasser[-1,0]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[-1,0]>x,wasser[-1,0],y-x))+\

if(x>(y=elev[1,0]+wasser[1,0]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[1,0]>x,wasser[1,0],y-x))+\

if(x>(y=elev[0,-1]+wasser[0,-1]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[0,-1]>x,wasser[0,-1],y-x))+\

if(x>(y=elev[0,1]+wasser[0,1]),\
-.15*if(elev>y,wasser,x-y),\
.15*if(elev[0,1]>x,wasser[0,1],y-x))+\

if(x>(y=elev[-1,1]+wasser[-1,1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[-1,1]>x,wasser[-1,1],y-x))+\

if(x>(y=elev[1,1]+wasser[1,1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[1,1]>x,wasser[1,1],y-x))+\

if(x>(y=elev[1,-1]+wasser[1,-1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[1,-1]>x,wasser[1,-1],y-x))+\

if(x>(y=elev[-1,-1]+wasser[-1,-1]),\
-.10*if(elev>y,wasser,x-y),\
.10*if(elev[-1,-1]>x,wasser[-1,-1],y-x)))


Nun zur Frage: Wie Sie sicherlich gemerkt haben, wird, wenn der
Wasserstand im einen Pixel höher ist, als in jenem neben an, ein Teil
(10% bzw. 15%) des Wasser ins Nebenpixel geschüttet. Das Problem ist
nun, dass sich das Wasser z.B. auf einer absolut flachen Ebene bis zur
Unendlichkeit verteilt (Es gibt dann Pixel die nur noch den Wert
0,000001 haben). Was ich aber nun möchte ist, dass das Wasser erst dann
weiterfliesst, wenn das Pixel mindestens den Wasserstand 1 erreicht hat
(bzw, wenn elev+wasser>=4). Aber leider ist das nicht so einfach. Ich
habe schon x Versuche unternommen, irgendwo zusätzlich if-Schlaufen ein
zu bauen, mit dem Resultat, dass sich das Wasser entweder vermehrte oder
verschwand oder gar nichts geschah...

Hat jemand eine Idee wie ich das machen könnte (Formel abändern?
Rasterdaten abändern? irgendetwas?)

Vielen Dank für jede Hilfe

Martin