00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef GEOS_GEOS_LINESTRING_H
00022 #define GEOS_GEOS_LINESTRING_H
00023
00024 #include <geos/export.h>
00025 #include <geos/platform.h>
00026 #include <geos/geom/Geometry.h>
00027 #include <geos/geom/Lineal.h>
00028 #include <geos/geom/CoordinateSequence.h>
00029 #include <geos/geom/Envelope.h>
00030 #include <geos/geom/Dimension.h>
00031
00032 #include <string>
00033 #include <vector>
00034 #include <memory>
00035
00036 #include <geos/inline.h>
00037
00038 #ifdef _MSC_VER
00039 #pragma warning(push)
00040 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00041 #endif
00042
00043 namespace geos {
00044 namespace geom {
00045 class Coordinate;
00046 class CoordinateArraySequence;
00047 class CoordinateSequenceFilter;
00048 }
00049 }
00050
00051 namespace geos {
00052 namespace geom {
00053
00070 class GEOS_DLL LineString: public virtual Geometry, public Lineal {
00071
00072 public:
00073
00074 friend class GeometryFactory;
00075
00077 typedef std::vector<const LineString *> ConstVect;
00078
00079 virtual ~LineString();
00080
00088 virtual Geometry *clone() const;
00089
00090 virtual CoordinateSequence* getCoordinates() const;
00091
00093 const CoordinateSequence* getCoordinatesRO() const;
00094
00095 virtual const Coordinate& getCoordinateN(int n) const;
00096
00098 virtual Dimension::DimensionType getDimension() const;
00099
00105 virtual int getBoundaryDimension() const;
00106
00108 virtual int getCoordinateDimension() const;
00109
00115 virtual Geometry* getBoundary() const;
00116
00117 virtual bool isEmpty() const;
00118
00119 virtual std::size_t getNumPoints() const;
00120
00121 virtual Point* getPointN(std::size_t n) const;
00122
00127 virtual Point* getStartPoint() const;
00128
00133 virtual Point* getEndPoint() const;
00134
00135 virtual bool isClosed() const;
00136
00137 virtual bool isRing() const;
00138
00139 virtual std::string getGeometryType() const;
00140
00141 virtual GeometryTypeId getGeometryTypeId() const;
00142
00143 virtual bool isCoordinate(Coordinate& pt) const;
00144
00145 virtual bool equalsExact(const Geometry *other, double tolerance=0)
00146 const;
00147
00148 virtual void apply_rw(const CoordinateFilter *filter);
00149
00150 virtual void apply_ro(CoordinateFilter *filter) const;
00151
00152 virtual void apply_rw(GeometryFilter *filter);
00153
00154 virtual void apply_ro(GeometryFilter *filter) const;
00155
00156 virtual void apply_rw(GeometryComponentFilter *filter);
00157
00158 virtual void apply_ro(GeometryComponentFilter *filter) const;
00159
00160 void apply_rw(CoordinateSequenceFilter& filter);
00161
00162 void apply_ro(CoordinateSequenceFilter& filter) const;
00163
00171 virtual void normalize();
00172
00173
00174 virtual int compareToSameClass(const Geometry *ls) const;
00175
00176 virtual const Coordinate* getCoordinate() const;
00177
00178 virtual double getLength() const;
00179
00186 Geometry* reverse() const;
00187
00188 protected:
00189
00190 LineString(const LineString &ls);
00191
00195 LineString(CoordinateSequence *pts, const GeometryFactory *newFactory);
00196
00198 LineString(CoordinateSequence::AutoPtr pts,
00199 const GeometryFactory *newFactory);
00200
00201 Envelope::AutoPtr computeEnvelopeInternal() const;
00202
00203 CoordinateSequence::AutoPtr points;
00204
00205 private:
00206
00207 void validateConstruction();
00208
00209 };
00210
00211 struct GEOS_DLL LineStringLT {
00212 bool operator()(const LineString *ls1, const LineString *ls2) const {
00213 return ls1->compareTo(ls2)<0;
00214 }
00215 };
00216
00217
00218 inline Geometry*
00219 LineString::clone() const {
00220 return new LineString(*this);
00221 }
00222
00223 }
00224 }
00225
00226 #ifdef _MSC_VER
00227 #pragma warning(pop)
00228 #endif
00229
00230 #endif // ndef GEOS_GEOS_LINESTRING_H