00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef GEOS_GEOS_LINESTRING_H
00018 #define GEOS_GEOS_LINESTRING_H
00019
00020 #include <geos/platform.h>
00021 #include <geos/geom/Geometry.h>
00022 #include <geos/geom/CoordinateSequence.h>
00023 #include <geos/geom/Envelope.h>
00024 #include <geos/geom/Dimension.h>
00025
00026 #include <string>
00027 #include <vector>
00028 #include <memory>
00029
00030 #include <geos/inline.h>
00031
00032 namespace geos {
00033 namespace geom {
00034 class Coordinate;
00035 class CoordinateArraySequence;
00036 }
00037 }
00038
00039 namespace geos {
00040 namespace geom {
00041
00046 class LineString: public Geometry {
00047
00048 public:
00049
00050 friend class GeometryFactory;
00051
00053 typedef std::vector<const LineString *> ConstVect;
00054
00055 virtual ~LineString();
00056
00057 virtual Geometry *clone() const;
00058
00059 virtual CoordinateSequence* getCoordinates() const;
00060
00062 const CoordinateSequence* getCoordinatesRO() const;
00063
00064 virtual const Coordinate& getCoordinateN(int n) const;
00065
00067 virtual Dimension::DimensionType getDimension() const;
00068
00074 virtual int getBoundaryDimension() const;
00075
00081 virtual Geometry* getBoundary() const;
00082
00083 virtual bool isEmpty() const;
00084
00085 virtual size_t getNumPoints() const;
00086
00087 virtual Point* getPointN(size_t n) const;
00088
00093 virtual Point* getStartPoint() const;
00094
00099 virtual Point* getEndPoint() const;
00100
00101 virtual bool isClosed() const;
00102
00103 virtual bool isRing() const;
00104
00105 virtual std::string getGeometryType() const;
00106
00107 virtual GeometryTypeId getGeometryTypeId() const;
00108
00109 virtual bool isSimple() const;
00110
00111 virtual bool isCoordinate(Coordinate& pt) const;
00112
00113 virtual bool equalsExact(const Geometry *other, double tolerance=0)
00114 const;
00115
00116 virtual void apply_rw(const CoordinateFilter *filter);
00117
00118 virtual void apply_ro(CoordinateFilter *filter) const;
00119
00120 virtual void apply_rw(GeometryFilter *filter);
00121
00122 virtual void apply_ro(GeometryFilter *filter) const;
00123
00124 virtual void apply_rw(GeometryComponentFilter *filter);
00125
00126 virtual void apply_ro(GeometryComponentFilter *filter) const;
00127
00135 virtual void normalize();
00136
00137
00138 virtual int compareToSameClass(const Geometry *ls) const;
00139
00140 virtual const Coordinate* getCoordinate() const;
00141
00142 virtual double getLength() const;
00143
00150 LineString* reverse() const;
00151
00152 protected:
00153
00154 LineString(const LineString &ls);
00155
00159 LineString(CoordinateSequence *pts, const GeometryFactory *newFactory);
00160
00162 LineString(CoordinateSequence::AutoPtr pts,
00163 const GeometryFactory *newFactory);
00164
00165 Envelope::AutoPtr computeEnvelopeInternal() const;
00166
00167 CoordinateSequence::AutoPtr points;
00168
00169 private:
00170
00171 void validateConstruction();
00172
00173 };
00174
00175 struct LineStringLT {
00176 bool operator()(const LineString *ls1, const LineString *ls2) const {
00177 return ls1->compareTo(ls2)<0;
00178 }
00179 };
00180
00181
00182 inline Geometry*
00183 LineString::clone() const {
00184 return new LineString(*this);
00185 }
00186
00187 }
00188 }
00189
00190
00191
00192
00193
00194 #endif // ndef GEOS_GEOS_LINESTRING_H
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235