geometry/doc/doxygen_output/html/group__simplify.html
Barend Gehrels 363580fbf6 Added old doxygen docs
[SVN r59777]
2010-02-20 15:57:12 +00:00

343 lines
21 KiB
HTML
Raw Blame History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Boost.Geometry (aka GGL, Generic Geometry Library)</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head>
<table cellpadding="2" width="100%">
<tbody>
<tr>
<td valign="top">
<img alt="Boost.Geometry" src="images/ggl-logo-big.png" height="80" width="200">
&nbsp;&nbsp;
</td>
<td valign="top" align="right">
<a href="http://www.boost.org">
<img alt="Boost C++ Libraries" src="images/accepted_by_boost.png" height="80" width="230" border="0">
</a>
</td>
</tr>
</tbody>
</table>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
<div class="tabs">
<ul>
<li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
<li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
<li><a href="modules.html"><span>Modules</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
<li><a href="examples.html"><span>Examples</span></a></li>
</ul>
</div>
</div>
<div class="contents">
<h1>simplify: remove points from a geometry, keeping shape (simplification or generalization)</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structboost_1_1geometry_1_1concept_1_1_simplify_strategy.html">boost::geometry::concept::SimplifyStrategy&lt; Strategy &gt;</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> for simplify. <a href="structboost_1_1geometry_1_1concept_1_1_simplify_strategy.html#_details">More...</a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classboost_1_1geometry_1_1strategy_1_1simplify_1_1douglas__peucker.html">boost::geometry::strategy::simplify::douglas_peucker&lt; Point, PointDistanceStrategy &gt;</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Implements the <a class="el" href="namespaceboost_1_1geometry_1_1strategy_1_1simplify.html">simplify</a> algorithm. <a href="classboost_1_1geometry_1_1strategy_1_1simplify_1_1douglas__peucker.html#_details">More...</a><br></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename Geometry &gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__simplify.html#g6560f249f736ec06e42e952d8c74d953">boost::geometry::simplify</a> (Geometry const &amp;geometry, Geometry &amp;out, double max_distance)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>. <a href="#g6560f249f736ec06e42e952d8c74d953"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename Geometry , typename Strategy &gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__simplify.html#gf44556d83e87be316b7dc26ca921af8b">boost::geometry::simplify</a> (Geometry const &amp;geometry, Geometry &amp;out, double max_distance, Strategy const &amp;strategy)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> using a specified <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a>. <a href="#gf44556d83e87be316b7dc26ca921af8b"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename Geometry , typename OutputIterator &gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__simplify.html#gc4e7d4a2cb14c23be483ea45a9e8c931">boost::geometry::simplify_inserter</a> (Geometry const &amp;geometry, OutputIterator out, double max_distance)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, using an output iterator. <a href="#gc4e7d4a2cb14c23be483ea45a9e8c931"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename Geometry , typename OutputIterator , typename Strategy &gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__simplify.html#g233462433d3dacfba8ff53ac93320c63">boost::geometry::simplify_inserter</a> (Geometry const &amp;geometry, OutputIterator out, double max_distance, Strategy const &amp;strategy)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, using an output iterator and a specified <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a>. <a href="#g233462433d3dacfba8ff53ac93320c63"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<dl class="user" compact><dt><b>Source description:</b></dt><dd><ul>
<li>Wikipedia: given a 'curve' composed of line segments to find a curve not too dissimilar but that has fewer points</li></ul>
</dd></dl>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a href="http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm">http://en.wikipedia.org/wiki/Ramer-Douglas-Peucker_algorithm</a></dd></dl>
<dl class="user" compact><dt><b>Performance</b></dt><dd><ul>
<li>Performance is measured on simplification of a collection of rings, such that 10% of the points is kept.</li><li>2776 counties of US are simplified in 0.7 seconds (<a href="http://trac.osgeo.org/ggl/wiki/Performance#Simplify1">http://trac.osgeo.org/ggl/wiki/Performance#Simplify1</a>)</li></ul>
</dd></dl>
<dl class="user" compact><dt><b>Geometries</b></dt><dd><ul>
<li><b>linestring:</b> <div align="center">
<img src="svg_simplify_road.png" alt="svg_simplify_road.png">
</div>
This US Road originally contained 34 points, the simplified version contains 7 points</li></ul>
</dd></dl>
<ul>
<li><b>polygon:</b> <div align="center">
<img src="svg_simplify_country.png" alt="svg_simplify_country.png">
</div>
This country (Belgium) originally contained 55 points, the simplified version contains 24 points</li></ul>
<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>simplifying a valid simple polygon (which never intersects itself) might result in an invalid polygon, where the simplified rings intersect themselves or one of the other outer or inner rings. Efficient simplification of a ring/polygon is still an "Open Problem" (<a href="http://maven.smith.edu/~orourke/TOPP/P24.html#Problem.24">http://maven.smith.edu/~orourke/TOPP/P24.html#Problem.24</a>)</dd></dl>
<ul>
<li><b>multi_linestring</b> </li><li><b>multi_polygon</b> </li></ul>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="gf44556d83e87be316b7dc26ca921af8b"></a><!-- doxytag: member="boost::geometry::simplify" ref="gf44556d83e87be316b7dc26ca921af8b" args="(Geometry const &amp;geometry, Geometry &amp;out, double max_distance, Strategy const &amp;strategy)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Geometry , typename Strategy &gt; </div>
<table class="memname">
<tr>
<td class="memname">void boost::geometry::simplify </td>
<td>(</td>
<td class="paramtype">Geometry const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Geometry &amp;&nbsp;</td>
<td class="paramname"> <em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&nbsp;</td>
<td class="paramname"> <em>max_distance</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Strategy const &amp;&nbsp;</td>
<td class="paramname"> <em>strategy</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> using a specified <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a>.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em><a class="el" href="namespaceboost_1_1geometry.html">geometry</a></em>&nbsp;</td><td>input <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, to be simplified </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out</em>&nbsp;</td><td>output <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, simplified version of the input <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> </td></tr>
<tr><td valign="top"></td><td valign="top"><em>max_distance</em>&nbsp;</td><td>distance (in units of input coordinates) of a vertex to other segments to be removed </td></tr>
<tr><td valign="top"></td><td valign="top"><em><a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a></em>&nbsp;</td><td>simplify <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> to be used for simplification, might include point-distance <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> </td></tr>
</table>
</dl>
<dl compact><dt><b>Examples: </b></dt><dd>
<a class="el" href="02__linestring__example_8cpp-example.html#a12">02_linestring_example.cpp</a>.</dl>
<p>Definition at line <a class="el" href="algorithms_2simplify_8hpp_source.html#l00273">273</a> of file <a class="el" href="algorithms_2simplify_8hpp_source.html">simplify.hpp</a>.</p>
</div>
</div><p>
<a class="anchor" name="g6560f249f736ec06e42e952d8c74d953"></a><!-- doxytag: member="boost::geometry::simplify" ref="g6560f249f736ec06e42e952d8c74d953" args="(Geometry const &amp;geometry, Geometry &amp;out, double max_distance)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Geometry &gt; </div>
<table class="memname">
<tr>
<td class="memname">void boost::geometry::simplify </td>
<td>(</td>
<td class="paramtype">Geometry const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Geometry &amp;&nbsp;</td>
<td class="paramname"> <em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&nbsp;</td>
<td class="paramname"> <em>max_distance</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>.
<p>
<dl class="note" compact><dt><b>Note:</b></dt><dd>This version of simplify simplifies a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> using the default <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> (Douglas Peucker), </dd></dl>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em><a class="el" href="namespaceboost_1_1geometry.html">geometry</a></em>&nbsp;</td><td>input <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, to be simplified </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out</em>&nbsp;</td><td>output <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, simplified version of the input <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> </td></tr>
<tr><td valign="top"></td><td valign="top"><em>max_distance</em>&nbsp;</td><td>distance (in units of input coordinates) of a vertex to other segments to be removed </td></tr>
</table>
</dl>
<dl class="user" compact><dt><b>Example:</b></dt><dd>The simplify algorithm can be used as following: <div class="fragment"><pre class="fragment">{
<a class="code" href="classboost_1_1geometry_1_1linestring.html" title="A linestring (named so by OGC) is a collection (default a vector) of points.">boost::geometry::linestring&lt;boost::geometry::point_xy&lt;double&gt;</a> &gt; line, simplified;
boost::geometry::read_wkt(<span class="stringliteral">"linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)"</span>, line);
<a class="code" href="group__simplify.html#gf44556d83e87be316b7dc26ca921af8b" title="Simplify a geometry using a specified strategy.">boost::geometry::simplify</a>(line, simplified, 0.5);
std::cout
&lt;&lt; <span class="stringliteral">" original line: "</span> &lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(line) &lt;&lt; std::endl
&lt;&lt; <span class="stringliteral">"simplified line: "</span> &lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(simplified) &lt;&lt; std::endl;
}
</pre></div> </dd></dl>
<p>Definition at line <a class="el" href="algorithms_2simplify_8hpp_source.html#l00310">310</a> of file <a class="el" href="algorithms_2simplify_8hpp_source.html">simplify.hpp</a>.</p>
</div>
</div><p>
<a class="anchor" name="g233462433d3dacfba8ff53ac93320c63"></a><!-- doxytag: member="boost::geometry::simplify_inserter" ref="g233462433d3dacfba8ff53ac93320c63" args="(Geometry const &amp;geometry, OutputIterator out, double max_distance, Strategy const &amp;strategy)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Geometry , typename OutputIterator , typename Strategy &gt; </div>
<table class="memname">
<tr>
<td class="memname">void boost::geometry::simplify_inserter </td>
<td>(</td>
<td class="paramtype">Geometry const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">OutputIterator&nbsp;</td>
<td class="paramname"> <em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&nbsp;</td>
<td class="paramname"> <em>max_distance</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Strategy const &amp;&nbsp;</td>
<td class="paramname"> <em>strategy</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, using an output iterator and a specified <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a>.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em><a class="el" href="namespaceboost_1_1geometry.html">geometry</a></em>&nbsp;</td><td>input <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, to be simplified </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out</em>&nbsp;</td><td>output iterator, outputs all simplified points </td></tr>
<tr><td valign="top"></td><td valign="top"><em>max_distance</em>&nbsp;</td><td>distance (in units of input coordinates) of a vertex to other segments to be removed </td></tr>
<tr><td valign="top"></td><td valign="top"><em><a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a></em>&nbsp;</td><td>simplify <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> to be used for simplification, might include point-distance <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> </td></tr>
</table>
</dl>
<dl class="user" compact><dt><b>Example:</b></dt><dd>simplify_inserter with <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> is used as following: <div class="fragment"><pre class="fragment">{
<span class="keyword">typedef</span> <a class="code" href="classboost_1_1geometry_1_1point__xy.html" title="2D point in Cartesian coordinate system">boost::geometry::point_xy&lt;double&gt;</a> P;
<span class="keyword">typedef</span> <a class="code" href="classboost_1_1geometry_1_1linestring.html" title="A linestring (named so by OGC) is a collection (default a vector) of points.">boost::geometry::linestring&lt;P&gt;</a> L;
L line;
boost::geometry::read_wkt(<span class="stringliteral">"linestring(1.1 1.1, 2.5 2.1, 3.1 3.1, 4.9 1.1, 3.1 1.9)"</span>, line);
<span class="keyword">typedef</span> <a class="code" href="structboost_1_1geometry_1_1strategy_1_1distance_1_1projected__point.html" title="Strategy for distance point to segment.">boost::geometry::strategy::distance::projected_point&lt;P, P&gt;</a> DS;
<span class="keyword">typedef</span> <a class="code" href="classboost_1_1geometry_1_1strategy_1_1simplify_1_1douglas__peucker.html" title="Implements the simplify algorithm.">boost::geometry::strategy::simplify::douglas_peucker&lt;P, DS&gt;</a> simplification;
<a class="code" href="group__simplify.html#g233462433d3dacfba8ff53ac93320c63" title="Simplify a geometry, using an output iterator and a specified strategy.">boost::geometry::simplify_inserter</a>(line, std::ostream_iterator&lt;P&gt;(std::cout, <span class="stringliteral">"\n"</span>), 0.5, simplification());
}
</pre></div> </dd></dl>
<p>Definition at line <a class="el" href="algorithms_2simplify_8hpp_source.html#l00352">352</a> of file <a class="el" href="algorithms_2simplify_8hpp_source.html">simplify.hpp</a>.</p>
</div>
</div><p>
<a class="anchor" name="gc4e7d4a2cb14c23be483ea45a9e8c931"></a><!-- doxytag: member="boost::geometry::simplify_inserter" ref="gc4e7d4a2cb14c23be483ea45a9e8c931" args="(Geometry const &amp;geometry, OutputIterator out, double max_distance)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Geometry , typename OutputIterator &gt; </div>
<table class="memname">
<tr>
<td class="memname">void boost::geometry::simplify_inserter </td>
<td>(</td>
<td class="paramtype">Geometry const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">OutputIterator&nbsp;</td>
<td class="paramname"> <em>out</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&nbsp;</td>
<td class="paramname"> <em>max_distance</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Simplify a <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, using an output iterator.
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em><a class="el" href="namespaceboost_1_1geometry.html">geometry</a></em>&nbsp;</td><td>input <a class="el" href="namespaceboost_1_1geometry.html">geometry</a>, to be simplified </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out</em>&nbsp;</td><td>output iterator, outputs all simplified points </td></tr>
<tr><td valign="top"></td><td valign="top"><em>max_distance</em>&nbsp;</td><td>distance (in units of input coordinates) of a vertex to other segments to be removed </td></tr>
</table>
</dl>
<p>Definition at line <a class="el" href="algorithms_2simplify_8hpp_source.html#l00375">375</a> of file <a class="el" href="algorithms_2simplify_8hpp_source.html">simplify.hpp</a>.</p>
</div>
</div><p>
</div>
<hr size="1">
<table width="100%">
<tbody>
<tr>
<td align="left"><small>
<p>December 1, 2009</p>
</small></td>
<td align="right">
<small>Copyright <20> 1995-2009 Barend Gehrels, Geodan, Amsterdam<br>
Copyright <20> 2008-2009 Bruno Lalande, Paris<br>
Copyright <20> 2009 Mateusz Loskot, Cadcorp, London<br>
</small>
</td>
</tr>
</tbody>
</table>
<address style="text-align: right;"><small>
Documentation is generated by&nbsp;<a href="http://www.doxygen.org/index.html">Doxygen</a>
</small></address>
</body>
</html>