[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