[GRASS-dev] v.what and spatial index

Glynn Clements glynn at gclements.plus.com
Thu Sep 14 02:46:42 EDT 2006


Moritz Lennert wrote:

> >>>> How would this change from the first approach (if v.what could easily be 
> >>>> made to accept multiple coordinates) ? This would again mean 'blindly' 
> >>>> collecting points before seeing the results, or having to call v.what 
> >>>> multiple times.
> >>> v.what would read one coordinate pair, perform the lookup, write out
> >>> the result(s), repeat until EOF.
> >>>
> >>> gis.m would start one v.what process; each time you click the mouse
> >>> button, it would send the coordinates to the v.what process, read the
> >>> result, then display it. It would need to restart v.what if the set of
> >>> maps changed, but could use a single process to look up multiple
> >>> points.
> >> Here's my attempt at applying what you suggest. It's not very 
> >> complicated, and seems to work fine here, but I'd appreciate if someone 
> >> could check that I didn't do anything wrong before committing.
> > 
> > One issue which won't show up when running it directly from the shell,
> > but will if you run it via pipes: you need to explicitly set stdin and
> > stdout to line-buffered operation with e.g.:
> > 
> > 	setvbuf(stdin,  NULL, _IOLBF, 0);
> > 	setvbuf(stdout, NULL, _IOLBF, 0);
> 
> Just to show my ignorance: why stdout ? I'm only using stdin, or ?

v.what would read coordinates from stdin and write information
regarding the point/line/area at (or near) those coordinates to
stdout.

See vector/v.what/what.c; there are 25 occurrences of "stdout" in that
file.

Actually, as what() always calls fflush(stdout), you can omit the
setvbuf() call for stdout.

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list