GEOS 3.2.1
|
00001 /********************************************************************** 00002 * $Id: TaggedLineString.h 2785 2009-12-03 19:55:11Z mloskot $ 00003 * 00004 * GEOS - Geometry Engine Open Source 00005 * http://geos.refractions.net 00006 * 00007 * Copyright (C) 2006 Refractions Research Inc. 00008 * 00009 * This is free software; you can redistribute and/or modify it under 00010 * the terms of the GNU Lesser General Licence as published 00011 * by the Free Software Foundation. 00012 * See the COPYING file for more information. 00013 * 00014 ********************************************************************** 00015 * 00016 * Last port: simplify/TaggedLineString.java rev. 1.2 (JTS-1.7.1) 00017 * 00018 ********************************************************************** 00019 * 00020 * NOTES: This class can be optimized to work with vector<Coordinate*> 00021 * rather then with CoordinateSequence. Also, LineSegment should 00022 * be replaced with a class not copying Coordinates. 00023 * 00024 **********************************************************************/ 00025 00026 #ifndef GEOS_SIMPLIFY_TAGGEDLINESTRING_H 00027 #define GEOS_SIMPLIFY_TAGGEDLINESTRING_H 00028 00029 #include <geos/export.h> 00030 #include <vector> 00031 #include <memory> 00032 00033 // Forward declarations 00034 namespace geos { 00035 namespace geom { 00036 class Coordinate; 00037 class CoordinateSequence; 00038 class Geometry; 00039 class LineString; 00040 class LinearRing; 00041 } 00042 namespace simplify { 00043 class TaggedLineSegment; 00044 } 00045 } 00046 00047 namespace geos { 00048 namespace simplify { // geos::simplify 00049 00050 00056 class GEOS_DLL TaggedLineString { 00057 00058 public: 00059 00060 typedef std::vector<geom::Coordinate> CoordVect; 00061 00062 typedef std::auto_ptr<CoordVect> CoordVectPtr; 00063 00064 typedef geom::CoordinateSequence CoordSeq; 00065 00066 typedef std::auto_ptr<geom::CoordinateSequence> CoordSeqPtr; 00067 00068 TaggedLineString(const geom::LineString* nParentLine, 00069 size_t minimumSize=2); 00070 00071 ~TaggedLineString(); 00072 00073 size_t getMinimumSize() const; 00074 00075 const geom::LineString* getParent() const; 00076 00077 const CoordSeq* getParentCoordinates() const; 00078 00079 CoordSeqPtr getResultCoordinates() const; 00080 00081 size_t getResultSize() const; 00082 00083 TaggedLineSegment* getSegment(size_t); 00084 00085 const TaggedLineSegment* getSegment(size_t) const; 00086 00087 std::vector<TaggedLineSegment*>& getSegments(); 00088 00089 const std::vector<TaggedLineSegment*>& getSegments() const; 00090 00091 void addToResult(std::auto_ptr<TaggedLineSegment> seg); 00092 00093 std::auto_ptr<geom::Geometry> asLineString() const; 00094 00095 std::auto_ptr<geom::Geometry> asLinearRing() const; 00096 00097 private: 00098 00099 const geom::LineString* parentLine; 00100 00101 // TaggedLineSegments owned by this object 00102 std::vector<TaggedLineSegment*> segs; 00103 00104 // TaggedLineSegments owned by this object 00105 std::vector<TaggedLineSegment*> resultSegs; 00106 00107 size_t minimumSize; 00108 00109 void init(); 00110 00111 static CoordVectPtr extractCoordinates( 00112 const std::vector<TaggedLineSegment*>& segs); 00113 00114 // Copying is turned off 00115 TaggedLineString(const TaggedLineString&); 00116 TaggedLineString& operator= (const TaggedLineString&); 00117 00118 }; 00119 00120 } // namespace geos::simplify 00121 } // namespace geos 00122 00123 #endif // GEOS_SIMPLIFY_TAGGEDLINESTRING_H 00124 00125 /********************************************************************** 00126 * $Log$ 00127 * Revision 1.7 2006/06/12 11:29:23 strk 00128 * unsigned int => size_t 00129 * 00130 * Revision 1.6 2006/04/13 21:52:34 strk 00131 * Many debugging lines and assertions added. Fixed bug in TaggedLineString class. 00132 * 00133 * Revision 1.5 2006/04/13 16:04:10 strk 00134 * Made TopologyPreservingSimplifier implementation successfully build 00135 * 00136 * Revision 1.4 2006/04/13 09:21:45 mloskot 00137 * Removed definition of copy ctor and assignment operator for TaggedLineString class. 00138 * According to following rule: Declaring, but not defining, private copy operations has 00139 * the effect of "turning off" copying for the class. 00140 * 00141 * Revision 1.3 2006/04/12 17:19:57 strk 00142 * Ported TaggedLineStringSimplifier class, made LineSegment class 00143 * polymorphic to fix derivation of TaggedLineSegment 00144 * 00145 * Revision 1.2 2006/04/12 15:20:37 strk 00146 * LineSegmentIndex class 00147 * 00148 * Revision 1.1 2006/04/12 14:22:12 strk 00149 * Initial implementation of TaggedLineSegment and TaggedLineString classes 00150 * 00151 **********************************************************************/