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

Markus Neteler neteler at osgeo.org
Fr Aug 14 15:56:12 CEST 2009


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