21 #ifndef GEOS_GEOS_LINESTRING_H
22 #define GEOS_GEOS_LINESTRING_H
24 #include <geos/export.h>
25 #include <geos/geom/Geometry.h>
26 #include <geos/geom/CoordinateSequence.h>
27 #include <geos/geom/Envelope.h>
28 #include <geos/geom/Dimension.h>
34 #include <geos/inline.h>
38 #pragma warning(disable: 4251) // warning C4251: needs to have dll-interface to be used by clients of class
44 class CoordinateArraySequence;
45 class CoordinateSequenceFilter;
68 class GEOS_DLL LineString:
public Geometry {
72 friend class GeometryFactory;
75 typedef std::vector<const LineString*> ConstVect;
77 ~LineString()
override;
86 std::unique_ptr<Geometry> clone()
const override;
88 std::unique_ptr<CoordinateSequence> getCoordinates()
const override;
91 const CoordinateSequence* getCoordinatesRO()
const;
93 virtual const Coordinate& getCoordinateN(
size_t n)
const;
103 int getBoundaryDimension()
const override;
106 int getCoordinateDimension()
const override;
113 std::unique_ptr<Geometry> getBoundary()
const override;
115 bool isEmpty()
const override;
117 std::size_t getNumPoints()
const override;
119 virtual std::unique_ptr<Point> getPointN(std::size_t n)
const;
125 virtual std::unique_ptr<Point> getStartPoint()
const;
131 virtual std::unique_ptr<Point> getEndPoint()
const;
133 virtual bool isClosed()
const;
135 virtual bool isRing()
const;
137 std::string getGeometryType()
const override;
141 virtual bool isCoordinate(Coordinate& pt)
const;
143 bool equalsExact(
const Geometry* other,
double tolerance = 0)
146 void apply_rw(
const CoordinateFilter* filter)
override;
148 void apply_ro(CoordinateFilter* filter)
const override;
150 void apply_rw(GeometryFilter* filter)
override;
152 void apply_ro(GeometryFilter* filter)
const override;
154 void apply_rw(GeometryComponentFilter* filter)
override;
156 void apply_ro(GeometryComponentFilter* filter)
const override;
158 void apply_rw(CoordinateSequenceFilter& filter)
override;
160 void apply_ro(CoordinateSequenceFilter& filter)
const override;
169 void normalize()
override;
172 int compareToSameClass(
const Geometry* ls)
const override;
174 const Coordinate* getCoordinate()
const override;
176 double getLength()
const override;
184 std::unique_ptr<Geometry> reverse()
const override;
188 LineString(
const LineString& ls);
193 LineString(CoordinateSequence* pts,
const GeometryFactory* newFactory);
196 LineString(CoordinateSequence::Ptr && pts,
197 const GeometryFactory& newFactory);
199 Envelope::Ptr computeEnvelopeInternal()
const override;
201 CoordinateSequence::Ptr points;
204 getSortIndex()
const override
206 return SORTINDEX_LINESTRING;
211 void validateConstruction();
215 struct GEOS_DLL LineStringLT {
217 operator()(
const LineString* ls1,
const LineString* ls2)
const
219 return ls1->compareTo(ls2) < 0;
224 inline std::unique_ptr<Geometry>
227 return std::unique_ptr<Geometry>(
new LineString(*
this));
237 #endif // ndef GEOS_GEOS_LINESTRING_H