[Fossgis-talk] [Grass-de] Rasteroperation

Christoph Heibl christoph.heibl at gmx.net
Mo Okt 12 19:45:01 CEST 2009


On Oct 10, 2009, at 2:47 PM, Markus Neteler wrote:

> Moin,
>
> (jetzt sollte die Listenzusammenfuehrung wirken)
>
> 2009/10/1 Tom Gottfried <tom.gottfried at wzw.tum.de>:
>> Hallo Christoph,
>>
>> Einen Verdacht hab ich aber schon: `r.category map=A` ergibt mein ich
>> eine Zeile pro Kategorie.
>
> Ja, z.B.
>
> r.category roads
> 1       interstate
> 2       primary highway, hard surface
> 3       secondary highway, hard surface
> 4       light-duty road, improved surface
> 5       unimproved road

In meinem konkreten Fall war es irgendwie anders:

Angenommen die Karte A hat fünf Kategorien (z.B.: 2, 5, 6, 8, 10),  
dann bekomme ich nach cat=`r.category map=A` (oder auch  
cat=`r.category map=A fs="|" | cut -d '|' -f1`) folgendes:

echo $cat
GRASS 6.4.svn :~ >2 5 6 8 10

echo ${cat[0]}
GRASS 6.4.svn :~ >2 5 6 8 10

echo ${cat[1]}
GRASS 6.4.svn :~ >

Ich habe erwartet, ein Array zu bekommen mit der Länge n = Anzahl der  
Kategorien und jedes Element des Array sollte mit einer Kategory  
besetzt sein.

Stattdessen sieht es so aus, als würden alle Kategoren im ersten  
Platzhalter sitzen und die restlichen wären leer.

Wie kann ich jetzt explizit auf das zweite Element zugreifen?

So etwas wie:

echo ${cat[1]}
GRASS 6.4.svn :~ >  5

Viele Grüße
Christoph



>
>> Die Variable cat sollte also nach cat=`r.category map=A` lediglich  
>> die Zeichen vor dem
>> ersten Leerzeichen in der ersten Zeile
>> der Ausgabe von `r.category map=A' enthalten (Kannst Du mit `echo  
>> $cat;
>> r.category map=A' überprüfen).
>
> Du kannst es so extrahieren:
>
> r.category roads fs="|" | cut -d '|' -f1
> 1
> 2
> 3
> 4
> 5
>
> also
> cat=`r.category roads fs="|" | cut -d '|' -f1`
> for i in $cat; do
> ...
>
> Gruesse
> Markus