• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

GeometryFactory.h

00001 /**********************************************************************
00002  * $Id: GeometryFactory.h 2556 2009-06-06 22:22:28Z strk $
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/export.h>
00026 #include <geos/inline.h>
00027 
00028 #include <vector>
00029 #include <memory>
00030 
00031 namespace geos {
00032         namespace geom { 
00033                 class CoordinateSequenceFactory;
00034                 class Coordinate;
00035                 class CoordinateSequence;
00036                 class Envelope;
00037                 class Geometry;
00038                 class GeometryCollection;
00039                 class LineString;
00040                 class LinearRing;
00041                 class MultiLineString;
00042                 class MultiPoint;
00043                 class MultiPolygon;
00044                 class Point;
00045                 class Polygon;
00046                 class PrecisionModel;
00047         }
00048 }
00049 
00050 namespace geos {
00051 namespace geom { // geos::geom
00052 
00063 class GEOS_DLL GeometryFactory {
00064 public:
00070         GeometryFactory();
00071 
00084         GeometryFactory(const PrecisionModel *pm, int newSRID,
00085                 CoordinateSequenceFactory *nCoordinateSequenceFactory);
00086 
00093         GeometryFactory(CoordinateSequenceFactory *nCoordinateSequenceFactory);
00094 
00103         GeometryFactory(const PrecisionModel *pm);
00104 
00114         GeometryFactory(const PrecisionModel* pm, int newSRID);
00115 
00121         GeometryFactory(const GeometryFactory &gf);
00122 
00129         static const GeometryFactory*
00130         getDefaultInstance();
00131 
00133         virtual ~GeometryFactory();
00134 
00135 //Skipped a lot of list to array convertors
00136 
00137         Point* createPointFromInternalCoord(const Coordinate* coord,
00138                         const Geometry *exemplar) const;
00139 
00141         //
00144         Geometry* toGeometry(const Envelope* envelope) const;
00145 
00149         const PrecisionModel* getPrecisionModel() const;
00150 
00152         Point* createPoint() const;
00153 
00155         Point* createPoint(const Coordinate& coordinate) const;
00156 
00158         Point* createPoint(CoordinateSequence *coordinates) const;
00159 
00161         Point* createPoint(const CoordinateSequence &coordinates) const;
00162 
00164         GeometryCollection* createGeometryCollection() const;
00165 
00167         Geometry* createEmptyGeometry() const;
00168 
00170         GeometryCollection* createGeometryCollection(
00171                         std::vector<Geometry *> *newGeoms) const;
00172 
00174         GeometryCollection* createGeometryCollection(
00175                         const std::vector<Geometry *> &newGeoms) const;
00176 
00178         MultiLineString* createMultiLineString() const;
00179 
00181         MultiLineString* createMultiLineString(
00182                         std::vector<Geometry *> *newLines) const;
00183 
00185         MultiLineString* createMultiLineString(
00186                         const std::vector<Geometry *> &fromLines) const;
00187 
00189         MultiPolygon* createMultiPolygon() const;
00190 
00192         MultiPolygon* createMultiPolygon(std::vector<Geometry *> *newPolys) const;
00193 
00195         MultiPolygon* createMultiPolygon(
00196                         const std::vector<Geometry *> &fromPolys) const;
00197 
00199         LinearRing* createLinearRing() const;
00200 
00202         LinearRing* createLinearRing(CoordinateSequence* newCoords) const;
00203 
00204         std::auto_ptr<Geometry> createLinearRing(
00205                         std::auto_ptr<CoordinateSequence> newCoords) const;
00206 
00208         LinearRing* createLinearRing(
00209                         const CoordinateSequence& coordinates) const;
00210 
00212         MultiPoint* createMultiPoint() const;
00213 
00215         MultiPoint* createMultiPoint(std::vector<Geometry *> *newPoints) const;
00216 
00218         MultiPoint* createMultiPoint(
00219                         const std::vector<Geometry *> &fromPoints) const;
00220 
00224         MultiPoint* createMultiPoint(
00225                         const CoordinateSequence &fromCoords) const;
00226 
00228         Polygon* createPolygon() const;
00229 
00231         Polygon* createPolygon(LinearRing *shell,
00232                         std::vector<Geometry *> *holes) const;
00233 
00235         Polygon* createPolygon(const LinearRing &shell,
00236                         const std::vector<Geometry *> &holes) const;
00237 
00239         LineString* createLineString() const;
00240 
00242         std::auto_ptr<LineString> createLineString(const LineString& ls) const;
00243 
00245         LineString* createLineString(CoordinateSequence* coordinates) const;
00246 
00247         std::auto_ptr<Geometry> createLineString(
00248                         std::auto_ptr<CoordinateSequence> coordinates) const;
00249 
00251         LineString* createLineString(
00252                         const CoordinateSequence& coordinates) const;
00253 
00285         Geometry* buildGeometry(std::vector<Geometry *> *geoms) const;
00286 
00294         Geometry* buildGeometry(const std::vector<Geometry *> &geoms) const;
00295         
00296         int getSRID() const;
00297 
00301         const CoordinateSequenceFactory* getCoordinateSequenceFactory() const;
00302 
00304         Geometry* createGeometry(const Geometry *g) const;
00305 
00307         void destroyGeometry(Geometry *g) const;
00308 
00309 private:
00310         const PrecisionModel* precisionModel;
00311         int SRID;
00312         const CoordinateSequenceFactory *coordinateListFactory;
00313 };
00314 
00315 } // namespace geos::geom
00316 } // namespace geos
00317 
00318 #ifdef GEOS_INLINE
00319 # include "geos/geom/GeometryFactory.inl"
00320 #endif
00321 
00322 #endif // ndef GEOS_GEOM_GEOMETRYFACTORY_H
00323 
00324 /**********************************************************************
00325  * $Log$
00326  * Revision 1.11  2006/07/08 00:33:55  strk
00327  *         * configure.in: incremented CAPI minor version, to avoid                        falling behind any future version from the 2.2. branch.
00328  *         * source/geom/Geometry.cpp, source/geom/GeometryFactory.cpp,
00329  *         source/geomgraph/EdgeRing.cpp,
00330  *         source/headers/geos/geom/Geometry.h,
00331  *         source/headers/geos/geom/GeometryFactory.h,
00332  *         source/headers/geos/geom/GeometryFactory.inl,
00333  *         source/headers/geos/geomgraph/EdgeRing.h:
00334  *         updated doxygen comments (sync with JTS head).
00335  *         * source/headers/geos/platform.h.in: include <inttypes.h>
00336  *         rather then <stdint.h>
00337  *
00338  * Revision 1.10  2006/06/19 21:17:24  strk
00339  * port info and doxygen dox.
00340  *
00341  * Revision 1.9  2006/04/28 11:56:52  strk
00342  * * source/geom/GeometryFactory.cpp, source/headers/geos/geom/GeometryFactory.h: added LineString copy constructor.
00343  * * source/geom/Polygon.cpp: fixed getBoundary method to always return a geometry composed by LineStrings (not LinearRings)
00344  *
00345  * Revision 1.8  2006/04/12 11:39:34  strk
00346  * Removed Geometry.h and CoordinateSequence.h includes.
00347  * The former created a circular dependency.
00348  *
00349  * Revision 1.7  2006/04/11 11:16:25  strk
00350  * Added LineString and LinearRing constructors by auto_ptr
00351  *
00352  * Revision 1.6  2006/04/10 13:09:49  strk
00353  * Added GeometryFactory::defaultInstance()
00354  * Made Geometry::INTERNAL_GEOMETRY_FACTORY an alias for it
00355  * removed last deletion from Unload::Release class
00356  *
00357  * Revision 1.5  2006/03/31 17:51:26  strk
00358  * A few assertion checking, comments cleanup, use of initialization lists
00359  * in constructors, handled NULL parameters.
00360  *
00361  * Revision 1.4  2006/03/28 16:33:14  strk
00362  * Added note about args responsibility in GeometryFactory constructor
00363  *
00364  * Revision 1.3  2006/03/24 09:52:41  strk
00365  * USE_INLINE => GEOS_INLINE
00366  *
00367  * Revision 1.2  2006/03/20 17:27:03  strk
00368  * Bug #72 - Missing <vector> header
00369  *
00370  * Revision 1.1  2006/03/09 16:46:49  strk
00371  * geos::geom namespace definition, first pass at headers split
00372  *
00373  **********************************************************************/
00374 

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1