[GRASS-user] Patching large numbers of vectors

Richard Chirgwin rchirgwin at ozemail.com.au
Fri Oct 24 19:22:46 EDT 2008


Markus Neteler wrote:
> Richard,
>
> without error messages it's hard to understand...
> Could you run it in command line? Then you may be able to
> copy the error.
>
> Alternative: tell us how to replicate it in the Spearfish or North
> Carolina sample data set...
>   
Markus,

The error:
ERROR: BUG (Vect_build_sidx_from_topo): area does not exist

Thanks for suggesting I try it in Spearfish; it made the string of
errors more manageable to search through.

Reproduced in Spearfish like this.

1) Create individual points
for i in `echo "select cat from bugsites" | db.select`; do
v.extract input=$i output="bugsites_""$i" where=cat=$i; done

2) Buffer individual points
for i in `g.mlist vect pattern="bugsites_*"`; do
v.buffer input=$i output="buffer_""$i" buffer=500; done

3) Add tables to buffers
for i in `g.mlist vect pattern="buffer_*"`; do
v.db.addtable map=$i; done

4) Overlay buffers with areas
for i in `g.mlist vect pattern="buffer_*"; do
v.overlay ainput=$i binput=trn_sites output="overlay_""$i" operator=and;
done

5) Create target patch map
for i in `g.mlist vect pattern="overlay_*"`; do
v.patch -a -e input=$i output=patch --overwrite; done

During the patch phase, this gets reported from time to time:
ERROR: BUG (Vect_build_sidx_from_topo): area does not exist

I can rebuild the file manually and the patch will work. However, the
error will even occur if I insert the build into the script:
for i in `g.mlist vect pattern="overlay_*"`; DO
v.build $i;
v.patch -a -e input=$i output=patch --overwrite; done

Thoughts?

RC

(By the way; why the labourious process? - I have a set of thousands of
points associated with areas, and want to constrain buffers using the
areas. If I just buffer the entire point file, I get lots of overlaps
that make things painful. I want to constrain the circles before
patching them together back into a single file.
I have tried other approaches -
- buffer all the points in one map with debug=buffer
- v.clean the resulting map
- add centroids
But I end up with incorrect boundaries that miss getting their centroids.)

> Markus
>
> On Thu, Oct 23, 2008 at 11:49 PM, Richard Chirgwin
> <rchirgwin at ozemail.com.au> wrote:
>   
>> Hi,
>>
>> There seems to be a problem in handling of large numbers of vectors.
>>
>> I had a large number of buffered points to put together. The buffer
>> areas (with centroids added) were constrained by non-overlapping areas
>> to avoid errors later, after which I wanted to patch them together into
>> a single file. I used:
>>
>> for i in `g.mlist vect pattern="Centroids*"`; do
>> v.patch -a -e input=$i output=patchfile --overwrite;
>> done
>>
>> to do this.
>>
>> For most vectors, everything works fine, but every now and again, the
>> patching process would report a problem (something like "error bug sidx
>> topo", it goes by in a flash and I haven't been able to work out how to
>> log the script outputs) with an individual vector. If, however, I
>> patched the vector manually (outside the script), it would work fine.
>>
>> I suspect that because of the speed and huge number of vectors I'm
>> trying to put together, v.patch is having trouble finding the sidx file,
>> but really, I have no idea. Any thoughts?
>>
>> Richard Chirgwin
>>
>> _______________________________________________
>> grass-user mailing list
>> grass-user at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/grass-user
>>
>>     
>
>
>
>   



More information about the grass-user mailing list