22 #include <geos/geom/Geometry.h>
23 #include <geos/geom/GeometryCollection.h>
24 #include <geos/geom/GeometryFactory.h>
25 #include <geos/geom/MultiPoint.h>
26 #include <geos/geom/MultiLineString.h>
27 #include <geos/geom/MultiPolygon.h>
28 #include <geos/geom/PrecisionModel.h>
29 #include <geos/util/IllegalArgumentException.h>
30 #include <geos/export.h>
38 class CoordinateSequenceFactory;
40 class CoordinateSequence;
43 class GeometryCollection;
46 class MultiLineString;
69 struct GeometryFactoryDeleter {
79 using Ptr = std::unique_ptr<GeometryFactory, GeometryFactoryDeleter>;
86 static GeometryFactory::Ptr
create();
164 return &precisionModel;
168 std::unique_ptr<Point>
createPoint(std::size_t coordinateDimension = 2)
const;
187 std::vector<Geometry*>* newGeoms)
const;
190 std::unique_ptr<GeometryCollection> createGeometryCollection(
191 std::vector<std::unique_ptr<T>> && newGeoms)
const {
193 return std::unique_ptr<GeometryCollection>(
new GeometryCollection(Geometry::toGeometryArray(std::move(newGeoms)), *
this));
198 const std::vector<const Geometry*>& newGeoms)
const;
205 std::vector<Geometry*>* newLines)
const;
209 const std::vector<const Geometry*>& fromLines)
const;
211 std::unique_ptr<MultiLineString> createMultiLineString(
212 std::vector<std::unique_ptr<LineString>> && fromLines)
const;
214 std::unique_ptr<MultiLineString> createMultiLineString(
215 std::vector<std::unique_ptr<Geometry>> && fromLines)
const;
225 const std::vector<const Geometry*>& fromPolys)
const;
227 std::unique_ptr<MultiPolygon> createMultiPolygon(
228 std::vector<std::unique_ptr<Polygon>> && fromPolys)
const;
230 std::unique_ptr<MultiPolygon> createMultiPolygon(
231 std::vector<std::unique_ptr<Geometry>> && fromPolys)
const;
239 std::unique_ptr<LinearRing> createLinearRing(
240 std::unique_ptr<CoordinateSequence> && newCoords)
const;
242 std::unique_ptr<LinearRing> createLinearRing(
243 std::vector<Coordinate> && coordinates)
const;
255 std::unique_ptr<MultiPoint> createMultiPoint(std::vector<std::unique_ptr<Point>> && newPoints)
const;
257 std::unique_ptr<MultiPoint> createMultiPoint(std::vector<std::unique_ptr<Geometry>> && newPoints)
const;
261 const std::vector<const Geometry*>& fromPoints)
const;
273 const std::vector<Coordinate>& fromCoords)
const;
276 std::unique_ptr<Polygon>
createPolygon(std::size_t coordinateDimension = 2)
const;
280 std::vector<LinearRing*>* holes)
const;
282 std::unique_ptr<Polygon> createPolygon(std::unique_ptr<LinearRing> && shell)
const;
284 std::unique_ptr<Polygon> createPolygon(std::unique_ptr<LinearRing> && shell,
285 std::vector<std::unique_ptr<LinearRing>> && holes)
const;
288 std::unique_ptr<Polygon>
createPolygon(std::vector<Coordinate> && coords)
const;
292 const std::vector<LinearRing*>& holes)
const;
303 std::unique_ptr<LineString> createLineString(
304 std::unique_ptr<CoordinateSequence> && coordinates)
const;
306 std::unique_ptr<LineString> createLineString(
307 std::vector<Coordinate> && coordinates)
const;
354 std::unique_ptr<Geometry> buildGeometry(std::vector<std::unique_ptr<Geometry>> && geoms)
const;
356 std::unique_ptr<Geometry> buildGeometry(std::vector<std::unique_ptr<Point>> && geoms)
const;
358 std::unique_ptr<Geometry> buildGeometry(std::vector<std::unique_ptr<LineString>> && geoms)
const;
360 std::unique_ptr<Geometry> buildGeometry(std::vector<std::unique_ptr<Polygon>> && geoms)
const;
371 std::unique_ptr<Geometry>
374 bool isHeterogeneous =
false;
375 std::size_t count = 0;
377 for(T i = from; i != toofar; ++i) {
381 geomClass = g->getSortIndex();
383 else if(geomClass != g->getSortIndex()) {
384 isHeterogeneous =
true;
390 return std::unique_ptr<Geometry>(createGeometryCollection());
395 return (*from)->clone();
404 std::vector<std::unique_ptr<Geometry>> fromGeoms;
405 for(T i = from; i != toofar; ++i) {
406 fromGeoms.push_back((*i)->clone());
410 if(isHeterogeneous) {
411 return createGeometryCollection(std::move(fromGeoms));
415 switch((*from)->getDimension()) {
416 case Dimension::A:
return createMultiPolygon(std::move(fromGeoms));
417 case Dimension::L:
return createMultiLineString(std::move(fromGeoms));
418 case Dimension::P:
return createMultiPoint(std::move(fromGeoms));
443 return coordinateListFactory;
529 mutable int _refCount;
535 void dropRef()
const;
A factory to create concrete instances of CoordinateSequences.
Definition: CoordinateSequenceFactory.h:44
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:44
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:58
@ A
Dimension value of a surface (2).
Definition: Dimension.h:46
@ L
Dimension value of a curve (1).
Definition: Dimension.h:43
@ P
Dimension value of a point (0).
Definition: Dimension.h:40
An Envelope defines a rectangulare region of the 2D coordinate plane.
Definition: Envelope.h:58
Represents a collection of heterogeneous Geometry objects.
Definition: GeometryCollection.h:52
Supplies a set of utility methods for building Geometry objects from CoordinateSequence or other Geom...
Definition: GeometryFactory.h:66
LineString * createLineString(const CoordinateSequence &coordinates) const
Construct a LineString with a deep-copy of given argument.
MultiPoint * createMultiPoint(const std::vector< const Geometry * > &fromPoints) const
Construct a MultiPoint with a deep-copy of given arguments.
static GeometryFactory::Ptr create(const PrecisionModel *pm)
Constructs a GeometryFactory that generates Geometries having the given PrecisionModel and the defaul...
std::unique_ptr< MultiPolygon > createMultiPolygon() const
Construct an EMPTY MultiPolygon.
const CoordinateSequenceFactory * getCoordinateSequenceFactory() const
Returns the CoordinateSequenceFactory associated with this GeometryFactory.
Definition: GeometryFactory.h:441
GeometryCollection * createGeometryCollection(std::vector< Geometry * > *newGeoms) const
Construct a GeometryCollection taking ownership of given arguments.
static GeometryFactory::Ptr create()
Constructs a GeometryFactory that generates Geometries having a floating PrecisionModel and a spatial...
std::unique_ptr< LinearRing > createLinearRing() const
Construct an EMPTY LinearRing.
GeometryFactory(const PrecisionModel *pm)
Constructs a GeometryFactory that generates Geometries having the given PrecisionModel and the defaul...
MultiPoint * createMultiPoint(const CoordinateSequence &fromCoords) const
Construct a MultiPoint containing a Point geometry for each Coordinate in the given list.
Point * createPoint(CoordinateSequence *coordinates) const
Creates a Point taking ownership of the given CoordinateSequence.
std::unique_ptr< LineString > createLineString(std::size_t coordinateDimension=2) const
Construct an EMPTY LineString.
Polygon * createPolygon(const LinearRing &shell, const std::vector< LinearRing * > &holes) const
Construct a Polygon with a deep-copy of given arguments.
LinearRing * createLinearRing(CoordinateSequence *newCoords) const
Construct a LinearRing taking ownership of given arguments.
MultiPolygon * createMultiPolygon(std::vector< Geometry * > *newPolys) const
Construct a MultiPolygon taking ownership of given arguments.
Geometry * createGeometry(const Geometry *g) const
Returns a clone of given Geometry.
std::unique_ptr< Geometry > createEmptyGeometry() const
Construct the EMPTY Geometry.
MultiLineString * createMultiLineString(std::vector< Geometry * > *newLines) const
Construct a MultiLineString taking ownership of given arguments.
GeometryCollection * createGeometryCollection(const std::vector< const Geometry * > &newGeoms) const
Constructs a GeometryCollection with a deep-copy of args.
Geometry * buildGeometry(const std::vector< const Geometry * > &geoms) const
This function does the same thing of the omonimouse function taking vector pointer instead of referen...
MultiPolygon * createMultiPolygon(const std::vector< const Geometry * > &fromPolys) const
Construct a MultiPolygon with a deep-copy of given arguments.
std::unique_ptr< MultiPoint > createMultiPoint() const
Constructs an EMPTY MultiPoint.
GeometryFactory(CoordinateSequenceFactory *nCoordinateSequenceFactory)
Constructs a GeometryFactory that generates Geometries having the given CoordinateSequence implementa...
std::unique_ptr< MultiLineString > createMultiLineString() const
Construct an EMPTY MultiLineString.
void destroyGeometry(Geometry *g) const
Destroy a Geometry, or release it.
static GeometryFactory::Ptr create(CoordinateSequenceFactory *nCoordinateSequenceFactory)
Constructs a GeometryFactory that generates Geometries having the given CoordinateSequence implementa...
std::unique_ptr< Polygon > createPolygon(std::size_t coordinateDimension=2) const
Construct an EMPTY Polygon.
static const GeometryFactory * getDefaultInstance()
Return a pointer to the default GeometryFactory. This is a global shared object instantiated using de...
const PrecisionModel * getPrecisionModel() const
Returns the PrecisionModel that Geometries created by this factory will be associated with.
Definition: GeometryFactory.h:162
std::unique_ptr< LineString > createLineString(const LineString &ls) const
Copy a LineString.
std::unique_ptr< Geometry > createEmpty(int dimension) const
GeometryFactory(const PrecisionModel *pm, int newSRID, CoordinateSequenceFactory *nCoordinateSequenceFactory)
Constructs a GeometryFactory that generates Geometries having the given PrecisionModel,...
std::unique_ptr< Geometry > buildGeometry(T from, T toofar) const
See buildGeometry(std::vector<Geometry *>&) for semantics.
Definition: GeometryFactory.h:372
LinearRing * createLinearRing(const CoordinateSequence &coordinates) const
Construct a LinearRing with a deep-copy of given arguments.
Polygon * createPolygon(LinearRing *shell, std::vector< LinearRing * > *holes) const
Construct a Polygon taking ownership of given arguments.
MultiPoint * createMultiPoint(const std::vector< Coordinate > &fromCoords) const
Construct a MultiPoint containing a Point geometry for each Coordinate in the given vector.
std::unique_ptr< Point > createPoint(std::size_t coordinateDimension=2) const
Creates an EMPTY Point.
std::unique_ptr< Geometry > toGeometry(const Envelope *envelope) const
GeometryFactory(const PrecisionModel *pm, int newSRID)
Constructs a GeometryFactory that generates Geometries having the given PrecisionModel and spatial-re...
virtual ~GeometryFactory()
Destructor.
std::unique_ptr< GeometryCollection > createGeometryCollection() const
Construct an EMPTY GeometryCollection.
std::unique_ptr< Polygon > createPolygon(std::vector< Coordinate > &&coords) const
Construct a Polygon from a Coordinate vector, taking ownership of the vector.
static GeometryFactory::Ptr create(const GeometryFactory &gf)
Copy constructor.
Point * createPoint(const Coordinate &coordinate) const
Creates a Point using the given Coordinate.
MultiLineString * createMultiLineString(const std::vector< const Geometry * > &fromLines) const
Construct a MultiLineString with a deep-copy of given arguments.
GeometryFactory(const GeometryFactory &gf)
Copy constructor.
LineString * createLineString(CoordinateSequence *coordinates) const
Construct a LineString taking ownership of given argument.
GeometryFactory()
Constructs a GeometryFactory that generates Geometries having a floating PrecisionModel and a spatial...
Point * createPoint(const CoordinateSequence &coordinates) const
Creates a Point with a deep-copy of the given CoordinateSequence.
static GeometryFactory::Ptr create(const PrecisionModel *pm, int newSRID)
Constructs a GeometryFactory that generates Geometries having the given PrecisionModel and spatial-re...
Geometry * buildGeometry(std::vector< Geometry * > *geoms) const
static GeometryFactory::Ptr create(const PrecisionModel *pm, int newSRID, CoordinateSequenceFactory *nCoordinateSequenceFactory)
Constructs a GeometryFactory that generates Geometries having the given PrecisionModel,...
MultiPoint * createMultiPoint(std::vector< Geometry * > *newPoints) const
Construct a MultiPoint taking ownership of given arguments.
Basic implementation of Geometry, constructed and destructed by GeometryFactory.
Definition: Geometry.h:186
Definition: LineString.h:66
Models an OGC SFS LinearRing. A LinearRing is a LineString which is both closed and simple.
Definition: LinearRing.h:55
Models a collection of LineStrings.
Definition: MultiLineString.h:50
Definition: MultiPoint.h:51
Definition: MultiPolygon.h:59
Represents a linear polygon, which may include holes.
Definition: Polygon.h:61
Specifies the precision model of the Coordinate in a Geometry.
Definition: PrecisionModel.h:90
Indicates one or more illegal arguments.
Definition: IllegalArgumentException.h:33
Basic namespace for all GEOS functionalities.
Definition: Angle.h:25