00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef GEOS_GEOS_LINESTRING_H
00023 #define GEOS_GEOS_LINESTRING_H
00024
00025 #include <geos/export.h>
00026 #include <geos/platform.h>
00027 #include <geos/geom/Geometry.h>
00028 #include <geos/geom/Lineal.h>
00029 #include <geos/geom/CoordinateSequence.h>
00030 #include <geos/geom/Envelope.h>
00031 #include <geos/geom/Dimension.h>
00032
00033 #include <string>
00034 #include <vector>
00035 #include <memory>
00036
00037 #include <geos/inline.h>
00038
00039 #ifdef _MSC_VER
00040 #pragma warning(push)
00041 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
00042 #endif
00043
00044 namespace geos {
00045 namespace geom {
00046 class Coordinate;
00047 class CoordinateArraySequence;
00048 class CoordinateSequenceFilter;
00049 }
00050 }
00051
00052 namespace geos {
00053 namespace geom {
00054
00071 class GEOS_DLL LineString: public virtual Geometry, public Lineal {
00072
00073 public:
00074
00075 friend class GeometryFactory;
00076
00078 typedef std::vector<const LineString *> ConstVect;
00079
00080 virtual ~LineString();
00081
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
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271