00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef GEOS_GEOS_GEOMETRYCOLLECTION_H
00021 #define GEOS_GEOS_GEOMETRYCOLLECTION_H
00022
00023 #include <geos/export.h>
00024 #include <geos/geom/Geometry.h>
00025
00026 #include <geos/geom/Envelope.h>
00027 #include <geos/geom/Dimension.h>
00028
00029 #include <geos/inline.h>
00030
00031 #include <string>
00032 #include <vector>
00033 #include <memory>
00034
00035
00036 namespace geos {
00037 namespace geom {
00038 class Coordinate;
00039 class CoordinateArraySequence;
00040 class CoordinateSequenceFilter;
00041 }
00042 }
00043
00044 namespace geos {
00045 namespace geom {
00046
00056 class GEOS_DLL GeometryCollection : public virtual Geometry {
00057
00058 public:
00059 friend class GeometryFactory;
00060
00061 typedef std::vector<Geometry *>::const_iterator const_iterator;
00062
00063 typedef std::vector<Geometry *>::iterator iterator;
00064
00065 const_iterator begin() const;
00066
00067 const_iterator end() const;
00068
00075 virtual Geometry *clone() const {
00076 return new GeometryCollection(*this);
00077 }
00078
00079 virtual ~GeometryCollection();
00080
00094 virtual CoordinateSequence* getCoordinates() const;
00095
00096 virtual bool isEmpty() const;
00097
00105 virtual Dimension::DimensionType getDimension() const;
00106
00108 virtual int getCoordinateDimension() const;
00109
00110 virtual Geometry* getBoundary() const;
00111
00117 virtual int getBoundaryDimension() const;
00118
00119 virtual std::size_t getNumPoints() const;
00120
00121 virtual std::string getGeometryType() const;
00122
00123 virtual GeometryTypeId getGeometryTypeId() const;
00124
00125 virtual bool equalsExact(const Geometry *other,
00126 double tolerance=0) const;
00127
00128 virtual void apply_ro(CoordinateFilter *filter) const;
00129
00130 virtual void apply_rw(const CoordinateFilter *filter);
00131
00132 virtual void apply_ro(GeometryFilter *filter) const;
00133
00134 virtual void apply_rw(GeometryFilter *filter);
00135
00136 virtual void apply_ro(GeometryComponentFilter *filter) const;
00137
00138 virtual void apply_rw(GeometryComponentFilter *filter);
00139
00140 virtual void apply_rw(CoordinateSequenceFilter& filter);
00141
00142 virtual void apply_ro(CoordinateSequenceFilter& filter) const;
00143
00144 virtual void normalize();
00145
00146 virtual const Coordinate* getCoordinate() const;
00147
00149 virtual double getArea() const;
00150
00152 virtual double getLength() const;
00153
00155 virtual std::size_t getNumGeometries() const;
00156
00158 virtual const Geometry* getGeometryN(std::size_t n) const;
00159
00160 protected:
00161
00162 GeometryCollection(const GeometryCollection &gc);
00163
00188 GeometryCollection(std::vector<Geometry *> *newGeoms, const GeometryFactory *newFactory);
00189
00190
00191 std::vector<Geometry *>* geometries;
00192
00193 Envelope::AutoPtr computeEnvelopeInternal() const;
00194
00195 int compareToSameClass(const Geometry *gc) const;
00196
00197 };
00198
00199 }
00200 }
00201
00202 #ifdef GEOS_INLINE
00203 # include "geos/geom/GeometryCollection.inl"
00204 #endif
00205
00206 #endif // ndef GEOS_GEOS_GEOMETRYCOLLECTION_H