[GRASS-user] points in polygon query

Maciej Sieczka tutey at o2.pl
Tue May 22 14:45:32 EDT 2007


Stefano Costa wrote:
> Il giorno lun, 21/05/2007 alle 20.41 +0200, Maciej Sieczka ha scritto:
>> Last time I checked that it was circa 20 (twenty) times faster for me.
>> Sorry no exact benchmarks.
> 
> Hi Maciek,
> are you talking about my specific script?

No. I was talking in general. I had an issue with slow db.execute in my
v.breach script. You can download it from GRASS AddOns WIKI site. Below
is the relevant fragment for inspiration. I don't see a reason why in
your case a similar solution should not yield a similar speedup. Even
if it was "only" say 3 faster it's still worth it.

The whole big idea is to take the db.execute out of the loop, collect
all SQL commands within this loop into a text file and then feed the
file into "db.execute input=" in the end, which executes all your SQL
commands in one run.

---

# upload breached Z into the table

tbl=`v.db.connect -g "${OUTP}" | awk '{print $2}'`
dbs=`v.db.connect -g "${OUTP}" | awk '{print $4}'`
drv=`v.db.connect -g "${OUTP}" | awk '{print $5}'`

# upload SQL commands into txt file first = ~20 times faster db.execute

for z in `awk -v DPTH="$DPTH" '{printf "%f ",$5-DPTH}' \
$TMP.${PROG}.input`; do

 row=`expr $row + 1`
 echo "UPDATE $tbl SET z_breach=$z WHERE cat=$row;" >> $TMP.${PROG}.sql

done

db.execute input=$TMP.${PROG}.sql database=$dbs driver=$drv > /dev/null

---

Maciek




More information about the grass-user mailing list