GEOS 3.2.2
|
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