[GRASS-user] Patching large numbers of vectors

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

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

On Thu, Oct 23, 2008 at 11:49 PM, Richard Chirgwin
<rchirgwin@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@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user

--
Open Source Geospatial Foundation
http://www.osgeo.org/
http://www.grassbook.org/

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@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@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-user