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/CoordinateSequence.h>
00028 #include <geos/geom/Envelope.h>
00029 #include <geos/geom/Dimension.h>
00030
00031 #include <string>
00032 #include <vector>
00033 #include <memory>
00034
00035 #include <geos/inline.h>
00036
00037 namespace geos {
00038 namespace geom {
00039 class Coordinate;
00040 class CoordinateArraySequence;
00041 class CoordinateSequenceFilter;
00042 }
00043 }
00044
00045 namespace geos {
00046 namespace geom {
00047
00052 class GEOS_DLL LineString: public Geometry {
00053
00054 public:
00055
00056 friend class GeometryFactory;
00057
00059 typedef std::vector<const LineString *> ConstVect;
00060
00061 virtual ~LineString();
00062
00069 virtual Geometry *clone() const;
00070
00071 virtual CoordinateSequence* getCoordinates() const;
00072
00074 const CoordinateSequence* getCoordinatesRO() const;
00075
00076 virtual const Coordinate& getCoordinateN(int n) const;
00077
00079 virtual Dimension::DimensionType getDimension() const;
00080
00086 virtual int getBoundaryDimension() const;
00087
00093 virtual Geometry* getBoundary() const;
00094
00095 virtual bool isEmpty() const;
00096
00097 virtual size_t getNumPoints() const;
00098
00099 virtual Point* getPointN(size_t n) const;
00100
00105 virtual Point* getStartPoint() const;
00106
00111 virtual Point* getEndPoint() const;
00112
00113 virtual bool isClosed() const;
00114
00115 virtual bool isRing() const;
00116
00117 virtual std::string getGeometryType() const;
00118
00119 virtual GeometryTypeId getGeometryTypeId() const;
00120
00121 virtual bool isCoordinate(Coordinate& pt) const;
00122
00123 virtual bool equalsExact(const Geometry *other, double tolerance=0)
00124 const;
00125
00126 virtual void apply_rw(const CoordinateFilter *filter);
00127
00128 virtual void apply_ro(CoordinateFilter *filter) const;
00129
00130 virtual void apply_rw(GeometryFilter *filter);
00131
00132 virtual void apply_ro(GeometryFilter *filter) const;
00133
00134 virtual void apply_rw(GeometryComponentFilter *filter);
00135
00136 virtual void apply_ro(GeometryComponentFilter *filter) const;
00137
00138 void apply_rw(CoordinateSequenceFilter& filter);
00139
00140 void apply_ro(CoordinateSequenceFilter& filter) const;
00141
00149 virtual void normalize();
00150
00151
00152 virtual int compareToSameClass(const Geometry *ls) const;
00153
00154 virtual const Coordinate* getCoordinate() const;
00155
00156 virtual double getLength() const;
00157
00164 Geometry* reverse() const;
00165
00166 protected:
00167
00168 LineString(const LineString &ls);
00169
00173 LineString(CoordinateSequence *pts, const GeometryFactory *newFactory);
00174
00176 LineString(CoordinateSequence::AutoPtr pts,
00177 const GeometryFactory *newFactory);
00178
00179 Envelope::AutoPtr computeEnvelopeInternal() const;
00180
00181 CoordinateSequence::AutoPtr points;
00182
00183 private:
00184
00185 void validateConstruction();
00186
00187 };
00188
00189 struct GEOS_DLL LineStringLT {
00190 bool operator()(const LineString *ls1, const LineString *ls2) const {
00191 return ls1->compareTo(ls2)<0;
00192 }
00193 };
00194
00195
00196 inline Geometry*
00197 LineString::clone() const {
00198 return new LineString(*this);
00199 }
00200
00201 }
00202 }
00203
00204
00205
00206
00207
00208 #endif // ndef GEOS_GEOS_LINESTRING_H
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
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249