[Fossgis-talk] [Grass-de] Raster-rechnen
Martin Schweizer
schweizermartin at students.unibe.ch
Mo Okt 12 20:36:51 CEST 2009
Hallo Markus
Habe gerade herausgefunden wieso es nicht funktioniert hat. Ich hatte
bei der Raster-map "sied" jede Menge NULL-Werte. Ich habe diese nun in
"0"-Werte verwandelt und nun funktioniert die ganze Sache wunderbar.
Noch einmal sorry für die Störung und vielen Dank für deine Hilfe!
Martin
Martin Schweizer schrieb:
> Hallo Markus und Liste
>
> Vielen Dank für den Hinweis auf die Tutorials. Da war tatsächlich eine
> Formel drin die ich gut gebrauchen kann.
> (http://grass.osgeo.org/gdp/raster/mapcalc-algebra.pdf auf Seite 12)
> Nun habe ich aber diese Formel eingegeben, es wird gerechnet, und am
> Schluss habe ich eine Rasterkarte, bei welcher alle Zellen NULL-Werte
> haben. Ich habe nun schon lange gesucht, aber einfach keinen Fehler
> gefunden, deshalb hier mal die Frage: Findet jemand anders den Fehler?
>
> Die Formel:
>
> landw = sied+eval(x=eig+sied,\
> if(x>(y=eig[-1,0]+sied[-1,0]),\
> -.15*if(eig>y,sied,x-y),\
> .15*if(eig[-1,0]>x,sied[-1,0],y-x))+\
> if(x>(y=eig[1,0]+sied[1,0]),\
> -.15*if(eig>y,sied,x-y),\
> .15*if(eig[1,0]>x,sied[1,0],y-x))+\
> if(x>(y=eig[0,-1]+sied[0,-1]),\
> -.15*if(eig>y,sied,x-y),\
> .15*if(eig[0,-1]>x,sied[0,-1],y-x))+\
> if(x>(y=eig[0,1]+sied[0,1]),\
> -.15*if(eig>y,sied,x-y),\
> .15*if(eig[0,1]>x,sied[0,1],y-x))+\
> if(x>(y=eig[-1,1]+sied[-1,1]),\
> -.10*if(eig>y,sied,x-y),\
> .10*if(eig[-1,1]>x,sied[-1,1],y-x))+\
> if(x>(y=eig[1,1]+sied[1,1]),\
> -.10*if(eig>y,sied,x-y),\
> .10*if(eig[1,1]>x,sied[1,1],y-x))+\
> if(x>(y=eig[1,-1]+sied[1,-1]),\
> -.10*if(eig>y,sied,x-y),\
> .10*if(eig[1,-1]>x,sied[1,-1],y-x))+\
> if(x>(y=eig[-1,-1]+sied[-1,-1]),\
> -.10*if(eig>y,sied,x-y),\
> .10*if(eig[-1,-1]>x,sied[-1,-1],y-x)))
>
> Und die Angaben zu den Karten:
>
> GRASS 6.4.0RC5 (Landwirtschaft):~ > r.info map=eig
> +----------------------------------------------------------------------------+
> | Layer: eig Date: Mon Oct 12 18:07:15
> 2009
> | Mapset: Ecthelias Login of Creator:
> ecthelias
> | Location:
> Landwirtschaft
> | DataBase:
> /home/ecthelias/grassdata
> | Title: ( eig
> )
> | Timestamp:
> none
> |----------------------------------------------------------------------------
> |
>
> | Type of Map: raster Number of Categories:
> 255
> | Data Type:
> FCELL
> | Rows:
> 10417
> | Columns:
> 10146
> | Total Cells:
> 105690882
> | Projection: UTM (zone
> 32)
> | N: 5469466.69977 S: 4427807.08066979 Res:
> 99.99612356
> | E: 1173129.00002557 W: 158549.86485219 Res:
> 99.99794354
> | Range of data: min = -4.000000 max =
> 100.000000
> |
>
> | Data
> Description:
> | generated by
> r.proj
> |
>
> |
> Comments:
> | r.proj input="Eignung52" location="Romanum5" mapset="Ecthelias"
> outp\
> | ut="eig"
> method="nearest"
> |
>
> +----------------------------------------------------------------------------+
>
>
> GRASS 6.4.0RC5 (Landwirtschaft):~ > r.info map=sied
> +----------------------------------------------------------------------------+
> | Layer: sied Date: Mon Oct 12 16:40:34
> 2009
> | Mapset: Ecthelias Login of Creator:
> ecthelias
> | Location:
> Landwirtschaft
> | DataBase:
> /home/ecthelias/grassdata
> | Title: Labels ( Siedlungsflaeche2
> )
> | Timestamp:
> none
> |----------------------------------------------------------------------------
> |
>
> | Type of Map: raster Number of Categories:
> 0
> | Data Type:
> CELL
> | Rows:
> 10417
> | Columns:
> 10146
> | Total Cells:
> 105690882
> | Projection: UTM (zone
> 32)
> | N: 5469466.69977 S: 4427807.08066979 Res:
> 99.99612356
> | E: 1173129.00002557 W: 158549.86485219 Res:
> 99.99794354
> | Range of data: min = 0 max =
> 20000000
> |
>
> | Data
> Source:
> | Vector Map: Siedlungsflaeche in mapset
> Ecthelias
> | Original scale from vector map:
> 1:1
> |
>
> | Data
> Description:
> | generated by
> v.to.rast
> |
>
> |
> Comments:
> | v.to.rast input="Siedlungsflaeche" output="Siedlungsflaeche2"
> use="a\
> | ttr" type="point,line,area" layer=1 column="Flaeche" value=1
> rows=4096
> |
>
> +----------------------------------------------------------------------------+
>
> GRASS 6.4.0RC5 (Landwirtschaft):~ > r.info map=landw
> +----------------------------------------------------------------------------+
> | Layer: landw Date: Mon Oct 12 17:11:14
> 2009
> | Mapset: Ecthelias Login of Creator:
> ecthelias
> | Location:
> Landwirtschaft
> | DataBase:
> /home/ecthelias/grassdata
> | Title: ( landw
> )
> | Timestamp:
> none
> |----------------------------------------------------------------------------
> |
>
> | Type of Map: raster Number of Categories:
> 255
> | Data Type:
> DCELL
> | Rows:
> 10417
> | Columns:
> 10146
> | Total Cells:
> 105690882
> | Projection: UTM (zone
> 32)
> | N: 5469466.69977 S: 4427807.08066979 Res:
> 99.99612356
> | E: 1173129.00002557 W: 158549.86485219 Res:
> 99.99794354
> | Range of data: min = nan max =
> nan
> |
>
> | Data
> Description:
> | generated by
> r.mapcalc
> |
>
> |
> Comments:
> | sied + eval(x = eig + sied, if(x > (y = eig[-1,0] +
> sied[-1,0]),
> | -0.15 * if(eig > y, sied, x - y), 0.15 * if(eig[-1,0] >
> x,
> | sied[-1,0], y - x)) + if(x > (y = eig[1,0] + sied[1,0]), -0.15
> *
> | if(eig > y, sied, x - y), 0.15 * if(eig[1,0] > x, sied[1,0], y -
> x))
> | + if(x > (y = eig[0,-1] + sied[0,-1]), -0.15 * if(eig > y, sied, x
> -
> | y), 0.15 * if(eig[0,-1] > x, sied[0,-1], y - x)) + if(x > (y
> =
> | eig[0,1] + sied[0,1]), -0.15 * if(eig > y, sied, x - y), 0.15
> *
> | if(eig[0,1] > x, sied[0,1], y - x)) + if(x > (y = eig[-1,1]
> +
> | sied[-1,1]), -0.1 * if(eig > y, sied, x - y), 0.1 * if(eig[-1,1]
>
>>
>>
> | x, sied[-1,1], y - x)) + if(x > (y = eig[1,1] + sied[1,1]), -0.1
> *
> | if(eig > y, sied, x - y), 0.1 * if(eig[1,1] > x, sied[1,1], y -
> x))
> | + if(x > (y = eig[1,-1] + sied[1,-1]), -0.1 * if(eig > y, sied, x
> -
> | y), 0.1 * if(eig[1,-1] > x, sied[1,-1], y - x)) + if(x > (y
> =
> | eig[-1,-1] + sied[-1,-1]), -0.1 * if(eig > y, sied, x - y), 0.1
> *
> | if(eig[-1,-1] > x, sied[-1,-1], y -
> x)))
> |
> |
> +----------------------------------------------------------------------------+
>
> GRASS 6.4.0RC5 (Landwirtschaft):~ > g.region -p
> projection: 1 (UTM)
> zone: 32
> datum: wgs84
> ellipsoid: wgs84
> north: 5469466.69977
> south: 4427807.08066979
> west: 158549.86485219
> east: 1173129.00002557
> nsres: 99.99612356
> ewres: 99.99794354
> rows: 10417
> cols: 10146
> cells: 105690882
> GRASS 6.4.0RC5 (Landwirtschaft):~ >
>
> Vielen Dank für jede Hilfe!
>
> Viele Grüsse
>
> Martin
>
>
> Markus Neteler schrieb:
>
>> 2009/10/5 Martin Schweizer <schweizermartin at students.unibe.ch>:
>>
>>
>>> Hallo Markus
>>>
>>> Markus Neteler schrieb:
>>>
>>>
>>>> Hallo Martin,
>>>>
>>>>
>>>>
>> ...
>>
>>
>>>> Du sagt vorne
>>>> test=
>>>> aber benutzt test auch in der Formel - wie soll das gehen?
>>>>
>>>>
>>>>
>>> Nun, die Karte "test", welche erstellt wird wird halt auch wieder in der
>>> Formel verwendet. Soll heissen: Wenn auf der Karte "test" die soeben
>>> erstellt wird, die betreffende Zelle bereits den Wert 5 besitzt, dann
>>> bitte weiter zur nächsten Zelle (Dann ist die if-Bedingung nicht
>>> erfüllt....).
>>> Geht das aus irgend einem Grund nicht?
>>>
>>>
>> Ja genau, geht nicht (meines Wissens).
>>
>> Das Konzept ist
>> neu=Funktion(alt)
>>
>> In der r.mapcalc Seite ist ein Tutorial verlinkt
>> (etwas aelter, aber im Prinzip gueltig), was ein
>> paar Modelle beinhaltet, die in Deine Richtung
>> gehen.
>>
>> Gruesse
>> Markus
>>
>>
>>
>
>
>