# GeometryFactory.h

    00001 /**********************************************************************
    00002  * $Id: GeometryFactory.h 1820 2006-09-06 16:54:23Z mloskot $
    00003  *
    00004  * GEOS - Geometry Engine Open Source
    00005  * http://geos.refractions.net
    00006  *
    00007  * Copyright (C) 2006 Refractions Research Inc.
    00008  *
    00009  * This is free software; you can redistribute and/or modify it under
    00010  * the terms of the GNU Lesser General Public Licence as published
    00011  * by the Free Software Foundation.
    00012  * See the COPYING file for more information.
    00013  *
    00014  **********************************************************************
    00015  *
    00016  * Last port: geom/GeometryFactory.java rev. 1.48
    00017  *
    00018  **********************************************************************/
    00019
    00020 #ifndef GEOS_GEOM_GEOMETRYFACTORY_H
    00021 #define GEOS_GEOM_GEOMETRYFACTORY_H
    00022
    00023 //#include <geos/geom/CoordinateSequence.h>
    00024 //#include <geos/geom/Geometry.h>
    00025 #include <geos/inline.h>
    00026
    00027 #include <vector>
    00028 #include <memory>
    00029
    00030 namespace geos {
    00031         namespace geom {
    00032                 class CoordinateSequenceFactory;
    00033                 class Coordinate;
    00034                 class CoordinateSequence;
    00035                 class Envelope;
    00036                 class Geometry;
    00037                 class GeometryCollection;
    00038                 class LineString;
    00039                 class LinearRing;
    00040                 class MultiLineString;
    00041                 class MultiPoint;
    00042                 class MultiPolygon;
    00043                 class Point;
    00044                 class Polygon;
    00045                 class PrecisionModel;
    00046         }
    00047 }
    00048
    00049 namespace geos {
    00050 namespace geom { // geos::geom
    00051
    00062 class GeometryFactory {
    00063 public:
    00069         GeometryFactory();
    00070
    00083         GeometryFactory(const PrecisionModel *pm, int newSRID,
    00084                 CoordinateSequenceFactory *nCoordinateSequenceFactory);
    00085
    00092         GeometryFactory(CoordinateSequenceFactory *nCoordinateSequenceFactory);
    00093
    00102         GeometryFactory(const PrecisionModel *pm);
    00103
    00113         GeometryFactory(const PrecisionModel* pm, int newSRID);
    00114
    00120         GeometryFactory(const GeometryFactory &gf);
    00121
    00128         static const GeometryFactory*
    00129         getDefaultInstance();
    00130
    00132         virtual ~GeometryFactory();
    00133
    00134 //Skipped a lot of list to array convertors
    00135
    00136         Point* createPointFromInternalCoord(const Coordinate* coord,
    00137                         const Geometry *exemplar) const;
    00138
    00140         //
    00143         Geometry* toGeometry(const Envelope* envelope) const;
    00144
    00148         const PrecisionModel* getPrecisionModel() const;
    00149
    00151         Point* createPoint() const;
    00152
    00154         Point* createPoint(const Coordinate& coordinate) const;
    00155
    00157         Point* createPoint(CoordinateSequence *coordinates) const;
    00158
    00160         Point* createPoint(const CoordinateSequence &coordinates) const;
    00161
    00163         GeometryCollection* createGeometryCollection() const;
    00164
    00166         Geometry* createEmptyGeometry() const;
    00167
    00169         GeometryCollection* createGeometryCollection(
    00170                         std::vector<Geometry *> *newGeoms) const;
    00171
    00173         GeometryCollection* createGeometryCollection(
    00174                         const std::vector<Geometry *> &newGeoms) const;
    00175
    00177         MultiLineString* createMultiLineString() const;
    00178
    00180         MultiLineString* createMultiLineString(
    00181                         std::vector<Geometry *> *newLines) const;
    00182
    00184         MultiLineString* createMultiLineString(
    00185                         const std::vector<Geometry *> &fromLines) const;
    00186
    00188         MultiPolygon* createMultiPolygon() const;
    00189
    00191         MultiPolygon* createMultiPolygon(std::vector<Geometry *> *newPolys) const;
    00192
    00194         MultiPolygon* createMultiPolygon(
    00195                         const std::vector<Geometry *> &fromPolys) const;
    00196
    00198         LinearRing* createLinearRing() const;
    00199
    00201         LinearRing* createLinearRing(CoordinateSequence* newCoords) const;
    00202
    00203         std::auto_ptr<Geometry> createLinearRing(
    00204                         std::auto_ptr<CoordinateSequence> newCoords) const;
    00205
    00207         LinearRing* createLinearRing(
    00208                         const CoordinateSequence& coordinates) const;
    00209
    00211         MultiPoint* createMultiPoint() const;
    00212
    00214         MultiPoint* createMultiPoint(std::vector<Geometry *> *newPoints) const;
    00215
    00217         MultiPoint* createMultiPoint(
    00218                         const std::vector<Geometry *> &fromPoints) const;
    00219
    00223         MultiPoint* createMultiPoint(
    00224                         const CoordinateSequence &fromCoords) const;
    00225
    00227         Polygon* createPolygon() const;
    00228
    00230         Polygon* createPolygon(LinearRing *shell,
    00231                         std::vector<Geometry *> *holes) const;
    00232
    00234         Polygon* createPolygon(const LinearRing &shell,
    00235                         const std::vector<Geometry *> &holes) const;
    00236
    00238         LineString* createLineString() const;
    00239
    00241         std::auto_ptr<LineString> createLineString(const LineString& ls) const;
    00242
    00244         LineString* createLineString(CoordinateSequence* coordinates) const;
    00245
    00246         std::auto_ptr<Geometry> createLineString(
    00247                         std::auto_ptr<CoordinateSequence> coordinates) const;
    00248
    00250         LineString* createLineString(
    00251                         const CoordinateSequence& coordinates) const;
    00252
    00284         Geometry* buildGeometry(std::vector<Geometry *> *geoms) const;
    00285
    00293         Geometry* buildGeometry(const std::vector<Geometry *> &geoms) const;
    00294
    00295         int getSRID() const;
    00296
    00300         const CoordinateSequenceFactory* getCoordinateSequenceFactory() const;
    00301
    00303         Geometry* createGeometry(const Geometry *g) const;
    00304
    00306         void destroyGeometry(Geometry *g) const;
    00307
    00308 private:
    00309         const PrecisionModel* precisionModel;
    00310         int SRID;
    00311         const CoordinateSequenceFactory *coordinateListFactory;
    00312 };
    00313
    00314 } // namespace geos::geom
    00315 } // namespace geos
    00316
    00317 #ifdef GEOS_INLINE
    00318 # include "geos/geom/GeometryFactory.inl"
    00319 #endif
    00320
    00321 #endif // ndef GEOS_GEOM_GEOMETRYFACTORY_H
    00322
    00323 /**********************************************************************
    00324  * $Log$
    00325  * Revision 1.11  2006/07/08 00:33:55  strk
    00326  *         * configure.in: incremented CAPI minor version, to avoid                        falling behind any future version from the 2.2. branch.
    00327  *         * source/geom/Geometry.cpp, source/geom/GeometryFactory.cpp,
    00328  *         source/geomgraph/EdgeRing.cpp,
    00329  *         source/headers/geos/geom/Geometry.h,
    00330  *         source/headers/geos/geom/GeometryFactory.h,
    00331  *         source/headers/geos/geom/GeometryFactory.inl,
    00332  *         source/headers/geos/geomgraph/EdgeRing.h:
    00333  *         updated doxygen comments (sync with JTS head).
    00334  *         * source/headers/geos/platform.h.in: include <inttypes.h>
    00335  *         rather then <stdint.h>
    00336  *
    00337  * Revision 1.10  2006/06/19 21:17:24  strk
    00338  * port info and doxygen dox.
    00339  *
    00340  * Revision 1.9  2006/04/28 11:56:52  strk
    00341  * * source/geom/GeometryFactory.cpp, source/headers/geos/geom/GeometryFactory.h: added LineString copy constructor.
    00342  * * source/geom/Polygon.cpp: fixed getBoundary method to always return a geometry composed by LineStrings (not LinearRings)
    00343  *
    00344  * Revision 1.8  2006/04/12 11:39:34  strk
    00345  * Removed Geometry.h and CoordinateSequence.h includes.
    00346  * The former created a circular dependency.
    00347  *
    00348  * Revision 1.7  2006/04/11 11:16:25  strk
    00349  * Added LineString and LinearRing constructors by auto_ptr
    00350  *
    00351  * Revision 1.6  2006/04/10 13:09:49  strk
    00352  * Added GeometryFactory::defaultInstance()
    00353  * Made Geometry::INTERNAL_GEOMETRY_FACTORY an alias for it
    00354  * removed last deletion from Unload::Release class
    00355  *
    00356  * Revision 1.5  2006/03/31 17:51:26  strk
    00357  * A few assertion checking, comments cleanup, use of initialization lists
    00358  * in constructors, handled NULL parameters.
    00359  *
    00360  * Revision 1.4  2006/03/28 16:33:14  strk
    00361  * Added note about args responsibility in GeometryFactory constructor
    00362  *
    00363  * Revision 1.3  2006/03/24 09:52:41  strk
    00364  * USE_INLINE => GEOS_INLINE
    00365  *
    00366  * Revision 1.2  2006/03/20 17:27:03  strk
    00367  * Bug #72 - Missing <vector> header
    00368  *
    00369  * Revision 1.1  2006/03/09 16:46:49  strk
    00370  * geos::geom namespace definition, first pass at headers split
    00371  *
    00372  **********************************************************************/
    00373