00001 /********************************************************************** 00002 * $Id: TaggedLinesSimplifier.h 1820 2006-09-06 16:54:23Z 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/TaggedLinesSimplifier.java rev. 1.4 (JTS-1.7.1) 00017 * 00018 ********************************************************************** 00019 * 00020 * NOTES: changed from JTS design adding a private 00021 * TaggedLineStringSimplifier member and making 00022 * simplify(collection) method become a templated 00023 * function. 00024 * 00025 **********************************************************************/ 00026 00027 #ifndef _GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H_ 00028 #define _GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H_ 00029 00030 #include <vector> 00031 #include <memory> 00032 #include <cassert> 00033 00034 #include <geos/simplify/LineSegmentIndex.h> // for templated function body 00035 00036 // Forward declarations 00037 namespace geos { 00038 namespace simplify { 00039 //class LineSegmentIndex; 00040 class TaggedLineString; 00041 class TaggedLineStringSimplifier; 00042 } 00043 } 00044 00045 namespace geos { 00046 namespace simplify { // geos::simplify 00047 00052 class TaggedLinesSimplifier { 00053 00054 public: 00055 00056 TaggedLinesSimplifier(); 00057 00066 void setDistanceTolerance(double tolerance); 00067 00081 template <class iterator_type> 00082 void simplify( 00083 iterator_type begin, 00084 iterator_type end) 00085 { 00086 // add lines to the index 00087 for (iterator_type it=begin; it != end; ++it) { 00088 assert(*it); 00089 inputIndex->add(*(*it)); 00090 } 00091 00092 // Simplify lines 00093 for (iterator_type it=begin; it != end; ++it) { 00094 assert(*it); 00095 simplify(*(*it)); 00096 } 00097 } 00098 00099 00100 private: 00101 00102 void simplify(TaggedLineString& line); 00103 00104 std::auto_ptr<LineSegmentIndex> inputIndex; 00105 00106 std::auto_ptr<LineSegmentIndex> outputIndex; 00107 00108 std::auto_ptr<TaggedLineStringSimplifier> taggedlineSimplifier; 00109 00110 }; 00111 00112 00113 } // namespace geos::simplify 00114 } // namespace geos 00115 00116 #endif // _GEOS_SIMPLIFY_TAGGEDLINESSIMPLIFIER_H_ 00117 00118 /********************************************************************** 00119 * $Log$ 00120 * Revision 1.4 2006/05/24 15:32:11 strk 00121 * * source/headers/geos/simplify/TaggedLinesSimplifier.h: added LineSegmentIndex.h include so that every use of the templated simplify() function get all the required definitions. 00122 * 00123 * Revision 1.3 2006/05/24 11:41:23 strk 00124 * * source/headers/geos/simplify/TaggedLinesSimplifier.h, 00125 * source/simplify/TaggedLinesSimplifier.cpp, 00126 * source/simplify/TopologyPreservingSimplifier.cpp: 00127 * fixed bug in TopologyPreservingSimplifier failing to 00128 * detect intersections, refactored TaggedLinesSimplifier 00129 * class to more closely match JTS and use templated 00130 * functions. 00131 * 00132 * Revision 1.2 2006/04/13 14:25:17 strk 00133 * TopologyPreservingSimplifier initial port 00134 * 00135 * Revision 1.1 2006/04/13 10:39:12 strk 00136 * Initial implementation of TaggedLinesSimplifier class 00137 * 00138 **********************************************************************/