[Grass-de] r.in.xyz; Anzahl von Vektorpunkten pro Rasterzelle

Christoph Heibl christoph.heibl at gmx.net
Mo Aug 17 12:31:21 CEST 2009


Hallo Markus,

Vielen Dank! Das hat wunderbar geklappt.

Nur noch eine kleine Frage hätte ich noch dazu:

eval `g.region -g` hat bei mir nicht funktioniert, d.h. ich habe die  
Spaltennummer im r.mapcalc-Befehl von Hand eingeben müssen. Woran  
könnte das liegen? (Ich verwende GRASS 6.4 in der 'Terminal' shell  
unter MAC OS 10.4.11)


Der Vollständigkeit halber hier noch kurz wie ich nach aus den  
aktualisierten Vektordaten die Rasterkarte erzeugt habe:

--------
echo "select x,y,count FROM random20 NATURAL INNER JOIN (SELECT  
nummer,count(nummer) FROM random20 GROUP BY nummer ORDER BY nummer)  
AS random20_tmp" | db.select | v.in.ascii out=random20_s skip=1 x=1  
y=2 columns='x double precision, y double precision, spec varchar 
(30), sect varchar(30), count int' --overwrite

v.to.rast random20_s out=sampling use=attr column=count --o
---------

Eventuell geht das auch leichter ...

Viele Grüße,
Christoph



On Aug 14, 2009, at 3:56 PM, Markus Neteler wrote:

> Hallo Christoph,
>
> 2009/8/14 Christoph Heibl <christoph.heibl at gmx.net>:
>> Liebe Liste,
>>
>> Ich habe ein Set an Koordinaten und möchte eine Rasterkarte  
>> erstellen,
>> welche die Anzahl der Vektorpunkte pro Rasterzelle (bei einer  
>> gegebenen
>> Auflösung) als Werte zugewiesen bekommt. Dabei gibt es  
>> Rasterzellen, die
>> keine, einen oder mehr Vektorpunkte erhalten werden. Die  
>> Probennahme ist
>> also stark verzerrt.
>>
>> Ich habe es unter anderem so versucht:
>>
>> r.in.xyz in=xxx/grass/oxalis_sampling.txt out=sampling method=n
>>
>> Ich bekomme aber nicht das gewünschte Ergebnis, die Werte pro  
>> Zelle sind zu
>> niedrig.
>
> Wegen der Rasterisierung wuerde ich nicht r.in.xyz nehmen.
>
> Ich wurde es so machen (Obacht, geht nicht mit dem DBF Treiber,
> aber mit SQLite/mySQL/PostgreSQL etc):
>
> 1. Rasterzellen durchnummerieren:
>
> # rows und cols Variable holen
> eval `g.region -g`
> # jeder Zelle eine Nummer geben:
> r.mapcalc "numtmp = col() + row() * $rows * $cols"
>
> # ordentlich durchnumerieren:
> r.clump in=numtmp out=unique
>
> # visuelle Kosmetic:
> r.colors unique color=gyr
>
> d.mon x0
> d.rast unique
> d.rast.num unique  # geht nur, wenn Karte nicht zu gross
>
>
> 2. Zum Testen habe ich mir eine Random-Karte erzeugt
>
> v.random random20 n=20
> v.db.addtable  random20 column="nummer integer"
>
> # zum Nachzaehlen :)
> d.vect random20
>
> 3. Pixelnummer auf Vektorpunkte uebertragen:
> v.what.rast random20 column=nummer rast=unique
>
> # anschauen
> v.db.select random20
> # sortiert nach Pixelnummern anschauen
> v.db.select random20 | sort -n -t'|' -k2
>
>
> echo "select nummer,count(nummer) from random20 GROUP BY nummer ORDER
> BY nummer" | db.select
> nummer|count(nummer)
> 2|1
> 3|1
> 4|1
> 5|1
> 9|1
> 12|2
> 16|1
> 17|1
> 18|1
> 21|1
> 23|2
> 24|1
> 26|1
> 27|1
> 28|3
> 29|1
>
> Passt! Und ist genau...
>
> Ciao
> Markus
>
> PS: Ach, nachdem ich mir alles ausgedacht habe, sehe ich, dass ich
> es schon mal geschrieben hatte:
> http://grass.osgeo.org/wiki/Count_points_in_polygon