[GRASS-user] points in polygon query
Hamish
hamish_nospam at yahoo.com
Mon May 21 03:39:38 EDT 2007
Stefano Costa wrote:
> Scrive Dylan Beaudette <dylan.beaudette at gmail.com>:
>
> > This sounds like a form of quadrat counting
>
> Last night I wrote this script that does the job. Quite slow, but
> works. http://grass.gdf-hannover.de/wiki/V.count.points
re speed-
> echo "UPDATE $output SET count = $count WHERE cat = $i" | db.execute
instead of running db.execute at every iteration in your loop, >> append
the SQL command to a g.tempfile (end each line with a ';'), then once
the for loops are done, run db.execute once with the input=$tempfile.
then the script will be much much faster I think.
> for i in $areas; do
> count=$( db.select -c points_tmp sql="select cat_area from points_tmp" | grep -c $i)
You might want to make the ending "grep -c $i" a bit more specific,
as you don't want to count "10,11,Site 1" in a where="cat = 1" grep count.
As written it could lead to buggy results.
for example:
G63> g.copy v=bugsites,local_bugs
G63> i=1
G63> db.select local_bugs | grep -c $i
19
G63> db.select local_bugs | grep -c "^$i|"
1
also if you save the output of db.select to a temp file you don't need
to run the process for every step in the loop, as it doesn't change.
Maybe a bit faster that way- move as much repeated static operations
as possible out of loops.
Hamish
More information about the grass-user
mailing list