GEOS
3.9.1dev
|
Computes the buffer of a geometry, for both positive and negative buffer distances. More...
#include <BufferOp.h>
Public Types | |
enum | { CAP_ROUND = BufferParameters::CAP_ROUND, CAP_BUTT = BufferParameters::CAP_FLAT, CAP_SQUARE = BufferParameters::CAP_SQUARE } |
Public Member Functions | |
BufferOp (const geom::Geometry *g) | |
Initializes a buffer computation for the given geometry. More... | |
BufferOp (const geom::Geometry *g, const BufferParameters ¶ms) | |
Initializes a buffer computation for the given geometry with the given set of parameters. More... | |
void | setEndCapStyle (int nEndCapStyle) |
Specifies the end cap style of the generated buffer. More... | |
void | setQuadrantSegments (int nQuadrantSegments) |
Sets the number of segments used to approximate a angle fillet. More... | |
void | setSingleSided (bool isSingleSided) |
Sets whether the computed buffer should be single-sided. More... | |
geom::Geometry * | getResultGeometry (double nDistance) |
Returns the buffer computed for a geometry for a given buffer distance. More... | |
Static Public Member Functions | |
static geom::Geometry * | bufferOp (const geom::Geometry *g, double distance, int quadrantSegments=BufferParameters::DEFAULT_QUADRANT_SEGMENTS, int endCapStyle=BufferParameters::CAP_ROUND) |
Computes the buffer for a geometry for a given buffer distance and accuracy of approximation. More... | |
Private Member Functions | |
void | computeGeometry () |
void | bufferOriginalPrecision () |
void | bufferReducedPrecision (int precisionDigits) |
void | bufferReducedPrecision () |
void | bufferFixedPrecision (const geom::PrecisionModel &fixedPM) |
Static Private Member Functions | |
static double | precisionScaleFactor (const geom::Geometry *g, double distance, int maxPrecisionDigits) |
Private Attributes | |
const geom::Geometry * | argGeom |
util::TopologyException | saveException |
double | distance |
BufferParameters | bufParams |
geom::Geometry * | resultGeometry |
Static Private Attributes | |
static const int | MAX_PRECISION_DIGITS = 12 |
A number of digits of precision which leaves some computational "headroom" for floating point operations. More... | |
Computes the buffer of a geometry, for both positive and negative buffer distances.
In GIS, the positive (or negative) buffer of a geometry is defined as the Minkowski sum (or difference) of the geometry with a circle with radius equal to the absolute value of the buffer distance. In the CAD/CAM world buffers are known as offset curves. In morphological analysis the operation of positive and negative buffering is referred to as erosion and dilation.
The buffer operation always returns a polygonal result. The negative or zero-distance buffer of lines and points is always an empty Polygon.
Since true buffer curves may contain circular arcs, computed buffer polygons can only be approximations to the true geometry. The user can control the accuracy of the curve approximation by specifying the number of linear segments with which to approximate a curve.
The end cap style of a linear buffer may be specified. The following end cap styles are supported:
Definition at line 78 of file BufferOp.h.
anonymous enum |
Enumerator | |
---|---|
CAP_ROUND |
Specifies a round line buffer end cap style. |
CAP_BUTT |
Specifies a butt (or flat) line buffer end cap style. |
CAP_SQUARE |
Specifies a square line buffer end cap style. |
Definition at line 134 of file BufferOp.h.
|
inline |
Initializes a buffer computation for the given geometry.
g | the geometry to buffer |
Definition at line 171 of file BufferOp.h.
|
inline |
Initializes a buffer computation for the given geometry with the given set of parameters.
g | the geometry to buffer |
params | the buffer parameters to use. This class will copy it to private memory. |
Definition at line 187 of file BufferOp.h.
|
private |
|
static |
Computes the buffer for a geometry for a given buffer distance and accuracy of approximation.
g | the geometry to buffer |
distance | the buffer distance |
quadrantSegments | the number of segments used to approximate a quarter circle |
endCapStyle | line buffer end cap style (default: BufferParameters::CAP_ROUND) |
|
private |
|
private |
|
private |
|
private |
geom::Geometry* geos::operation::buffer::BufferOp::getResultGeometry | ( | double | nDistance | ) |
Returns the buffer computed for a geometry for a given buffer distance.
nDistance | the buffer distance |
|
staticprivate |
Compute a reasonable scale factor to limit the precision of a given combination of Geometry and buffer distance. The scale factor is based on a heuristic.
g | the Geometry being buffered |
distance | the buffer distance |
maxPrecisionDigits | the mzx # of digits that should be allowed by the precision determined by the computed scale factor |
|
inline |
Specifies the end cap style of the generated buffer.
The styles supported are CAP_ROUND, CAP_BUTT, and CAP_SQUARE. The default is CAP_ROUND.
nEndCapStyle | the end cap style to specify |
Definition at line 253 of file BufferOp.h.
|
inline |
Sets the number of segments used to approximate a angle fillet.
nQuadrantSegments | the number of segments in a fillet for a quadrant |
Definition at line 247 of file BufferOp.h.
|
inline |
Sets whether the computed buffer should be single-sided.
A single-sided buffer is constructed on only one side of each input line.
The side used is determined by the sign of the buffer distance:
The single-sided buffer of point geometries is the same as the regular buffer.
The End Cap Style for single-sided buffers is always ignored, and forced to the equivalent of CAP_FLAT
.
isSingleSided | true if a single-sided buffer should be constructed |
Definition at line 259 of file BufferOp.h.
|
private |
Definition at line 110 of file BufferOp.h.
|
private |
Definition at line 118 of file BufferOp.h.
|
private |
Definition at line 114 of file BufferOp.h.
|
staticprivate |
A number of digits of precision which leaves some computational "headroom" for floating point operations.
This value should be less than the decimal precision of double-precision values (16).
Definition at line 89 of file BufferOp.h.
|
private |
Definition at line 120 of file BufferOp.h.
|
private |
Definition at line 112 of file BufferOp.h.