v.buffer creates a buffer around features of given type, which have a category in the given layer. The tolerance controls the number of vector segments being generated (the smaller the value, the more vector segments are generated).


Attributes are not transferred due to potential buffer overlap, which cannot be resolved automatically.

The input vector must be reasonably clean: lines must not intersect themselves. It is recommended to clean the input vector first with v.clean tool=snap,break,rmdupl and then create buffers. The snapping threshold depends on the digitization threshold and the desired buffering distance. As a rule of thumb, the snapping distance can be up to 1% of the buffering distance.


Buffer around input lines

v.buffer input=map output=buffer type=line buffer=100

Circles around input points

v.buffer input=pointsmap output=circles type=point buffer=1000 

Non-overlapping circles around input points with attribute transfer

v.buffer input=archsites output=circles type=point buffer=200 
# change original points to centroids: 
v.type in=archsites out=archcentroids type=point,centroid 
# patch circles and centroids: 
v.patch in=archcentroids,circles out=circles_db 
# attach attributes, either use 
# db.copy ... 
# or link to the original table: 
v.db.connect map=circles_db table=archsites field=1 key=cat driver=dbf \


For some data v.buffer can produce strange results, especially if the buffer size is bigger than input features. Usually you can solve the problem if you run v.buffer more times with smaller buffer.

The bufcol dynamic buffer distance parameter has problems cleaning complex features (holes left filled, etc.). If you experience problems, try running v.buffer multiple times with a single buffer distance, patch the results with v.patch and remove any overlaps with v.extract -d.


r.buffer, v.extract, v.type, v.patch, v.db.connect


Radim Blazek

Last changed: $Date$