17#include <geos/export.h>
19#include <geos/operation/buffer/BufferParameters.h>
20#include <geos/geom/GeometryFactory.h>
21#include <geos/constants.h>
94 const Geometry& inputGeom;
96 bool isJoined =
false;
100 const GeometryFactory* geomFactory;
104 std::unique_ptr<Geometry> computePolygonCurve(
105 const Polygon& polyGeom,
double distance);
107 std::unique_ptr<Geometry> computeCurve(
108 const LineString& lineGeom,
double distance);
110 std::vector<std::unique_ptr<OffsetCurveSection>> computeSections(
111 const LineString& lineGeom,
double distance);
113 std::unique_ptr<LineString> offsetSegment(
114 const CoordinateSequence* pts,
double distance);
116 static std::unique_ptr<Polygon> getBufferOriented(
117 const LineString&
geom,
double distance,
128 static const Polygon* extractMaxAreaPolygon(
const Geometry*
geom);
130 void computeCurveSections(
131 const CoordinateSequence* bufferRingPts,
132 const CoordinateSequence& rawCurve,
133 std::vector<std::unique_ptr<OffsetCurveSection>>& sections);
147 std::size_t matchSegments(
148 const Coordinate& raw0,
const Coordinate& raw1,
149 std::size_t rawCurveIndex,
150 SegmentMCIndex& bufferSegIndex,
151 const CoordinateSequence* bufferPts,
152 std::vector<double>& rawCurvePos);
154 static double segmentMatchFrac(
155 const Coordinate& p0,
const Coordinate& p1,
156 const Coordinate& seg0,
const Coordinate& seg1,
157 double matchDistance);
170 void extractSections(
171 const CoordinateSequence* ringPts,
172 std::vector<double>& rawCurveLoc,
173 std::size_t startIndex,
174 std::vector<std::unique_ptr<OffsetCurveSection>>& sections);
176 std::size_t findSectionStart(
177 const std::vector<double>& loc,
180 std::size_t findSectionEnd(
181 const std::vector<double>& loc,
183 std::size_t firstStartIndex);
185 static std::size_t nextIndex(std::size_t i, std::size_t size);
186 static std::size_t prevIndex(std::size_t i, std::size_t size);
192 static constexpr int MATCH_DISTANCE_FACTOR = 10000;
213 , matchDistance(std::abs(dist)/MATCH_DISTANCE_FACTOR)
214 , geomFactory(
geom.getFactory())
216 if (!std::isfinite(dist)) {
233 , matchDistance(std::abs(dist)/MATCH_DISTANCE_FACTOR)
234 , geomFactory(
geom.getFactory())
236 if (!std::isfinite(dist)) {
249 bufferParams.setQuadrantSegments(quadSegs);
264 static std::unique_ptr<Geometry> getCurve(
265 const Geometry&
geom,
271 static std::unique_ptr<Geometry> getCurve(
272 const Geometry&
geom,
double dist);
283 const Geometry&
geom,
double dist);
306 const LineString& line,
319 const LineString& line,
The internal representation of a list of coordinates inside a Geometry.
Definition CoordinateSequence.h:56
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:217
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition GeometryFactory.h:70
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition Geometry.h:196
Definition LineString.h:66
Represents a linear polygon, which may include holes.
Definition Polygon.h:61
Contains the parameters which describe how a buffer should be constructed.
Definition BufferParameters.h:56
double getMitreLimit() const
Definition BufferParameters.h:224
JoinStyle getJoinStyle() const
Definition BufferParameters.h:199
int getQuadrantSegments() const
Definition BufferParameters.h:137
JoinStyle
Join styles.
Definition BufferParameters.h:74
Definition OffsetCurveSection.h:49
OffsetCurve(const Geometry &geom, double dist, BufferParameters &bp)
Definition OffsetCurve.h:230
std::unique_ptr< Geometry > getCurve()
static constexpr int MIN_QUADRANT_SEGMENTS
Definition OffsetCurve.h:198
static std::unique_ptr< CoordinateSequence > rawOffsetCurve(const LineString &line, double distance, BufferParameters &bufParams)
static std::unique_ptr< CoordinateSequence > rawOffset(const LineString &line, double distance)
static std::unique_ptr< Geometry > getCurveJoined(const Geometry &geom, double dist)
void setJoined(bool pIsJoined)
OffsetCurve(const Geometry &geom, double dist)
Definition OffsetCurve.h:210
Indicates one or more illegal arguments.
Definition IllegalArgumentException.h:33
Provides classes for computing buffers of geometries.
Definition namespaces.h:182
Provides classes for implementing operations on geometries.
Definition CleanCoverage.h:34
Basic namespace for all GEOS functionalities.
Definition geos.h:38