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

275 lines
17 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>intersection: calculate new geometry containing geometries A and B</h1><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator &gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">OutputIterator&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__intersection.html#gb6d39de5ae990bc08704bedc7deb2a6f">boost::geometry::intersection_inserter</a> (Geometry1 const &amp;geometry1, Geometry2 const &amp;geometry2, OutputIterator out)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Intersects two geometries. <a href="#gb6d39de5ae990bc08704bedc7deb2a6f"></a><br></td></tr>
<tr><td class="memTemplParams" nowrap colspan="2">template&lt;typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator , typename Strategy &gt; </td></tr>
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">OutputIterator&nbsp;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__intersection.html#g46db306c194d2b17833c524de43edfe8">boost::geometry::intersection_inserter</a> (Geometry1 const &amp;geometry1, Geometry2 const &amp;geometry2, OutputIterator out, Strategy const &amp;strategy)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Intersects two geometries. <a href="#g46db306c194d2b17833c524de43edfe8"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
The intersection of two geometries A and B is the geometry containing all points of A also belonging to B, but no other elements. The so-called clip is an intersection of a geometry with a box. <dl class="user" compact><dt><b>Source description:</b></dt><dd><ul>
<li>OGC: Returns a geometric object that represents the Point set intersection of this geometric object with another Geometry. </li></ul>
</dd></dl>
<dl class="see" compact><dt><b>See also:</b></dt><dd><a href="http://en.wikipedia.org/wiki/Intersection_(set_theory)">http://en.wikipedia.org/wiki/Intersection_(set_theory)</a> </dd></dl>
<dl class="note" compact><dt><b>Note:</b></dt><dd>Any intersection can result in no geometry at all</dd></dl>
<dl class="user" compact><dt><b>Performance</b></dt><dd><ul>
<li>2776 counties of US are intersected with a 100-points ellipse in 1.1 seconds (<a href="http://trac.osgeo.org/ggl/wiki/Performance#Interesection">http://trac.osgeo.org/ggl/wiki/Performance#Interesection</a>)</li><li>2776 counties of US are clipped in 0.2 seconds (<a href="http://trac.osgeo.org/ggl/wiki/Performance#Clip">http://trac.osgeo.org/ggl/wiki/Performance#Clip</a>)</li></ul>
</dd></dl>
<dl class="user" compact><dt><b>Geometries:</b></dt><dd><ul>
<li><b>polygon</b> + <b>box</b> (clip) -&gt; <b>polygon(s)</b> <div align="center">
<img src="svg_intersection_polygon_box.png" alt="svg_intersection_polygon_box.png">
</div>
<div align="center">
<img src="svg_intersection_countries.png" alt="svg_intersection_countries.png">
</div>
</li><li><b>ring</b> + <b>box</b> (clip) -&gt; <b>polygon(s)</b> <div align="center">
<img src="svg_intersection_ring_box.png" alt="svg_intersection_ring_box.png">
</div>
</li><li><b>ring</b> + <b>ring</b> -&gt; <b>polygon(s)</b> <div align="center">
<img src="svg_intersection_ring_ring.png" alt="svg_intersection_ring_ring.png">
</div>
</li><li><b>polygon</b> + <b>ring</b> -&gt; <b>polygon(s)</b> <div align="center">
<img src="svg_intersection_polygon_ring.png" alt="svg_intersection_polygon_ring.png">
</div>
</li><li>combinations above -&gt; <b>ring(s)</b>. <em>If the output is an ouput iterator of rings, holes are omitted</em></li><li><b>linestring</b> + <b>box</b> (clip) <div align="center">
<img src="svg_intersection_roads.png" alt="svg_intersection_roads.png">
</div>
</li></ul>
</dd></dl>
<dl class="user" compact><dt><b>Example:</b></dt><dd>Example showing clipping of linestring with box <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;
<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> 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);
<a class="code" href="classboost_1_1geometry_1_1box.html" title="Class box: defines a box made of two describing points.">boost::geometry::box&lt;P&gt;</a> cb(P(1.5, 1.5), P(4.5, 2.5));
std::cout &lt;&lt; <span class="stringliteral">"Clipped linestring(s) "</span> &lt;&lt; std::endl;
std::vector&lt;boost::geometry::linestring&lt;P&gt; &gt; intersection;
boost::geometry::intersection_inserter&lt;boost::geometry::linestring&lt;P&gt; &gt;(cb, line, std::back_inserter(intersection));
}
</pre></div> </dd></dl>
<dl class="user" compact><dt><b>Example:</b></dt><dd>Example showing clipping of vector, outputting vectors, with box <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;
std::vector&lt;P&gt; vector_in;
boost::geometry::read_wkt&lt;P&gt;(<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>,
std::back_inserter(vector_in));
<a class="code" href="classboost_1_1geometry_1_1box.html" title="Class box: defines a box made of two describing points.">boost::geometry::box&lt;P&gt;</a> cb(P(1.5, 1.5), P(4.5, 2.5));
<span class="keyword">typedef</span> std::vector&lt;std::vector&lt;P&gt; &gt; VV;
VV vector_out;
boost::geometry::intersection_inserter&lt;std::vector&lt;P&gt; &gt;(cb, vector_in, std::back_inserter(vector_out));
std::cout &lt;&lt; <span class="stringliteral">"Clipped vector(s) "</span> &lt;&lt; std::endl;
<span class="keywordflow">for</span> (VV::const_iterator it = vector_out.begin(); it != vector_out.end(); it++)
{
std::copy(it-&gt;begin(), it-&gt;end(), std::ostream_iterator&lt;P&gt;(std::cout, <span class="stringliteral">" "</span>));
std::cout &lt;&lt; std::endl;
}
</pre></div> </dd></dl>
<dl class="user" compact><dt><b>Example:</b></dt><dd>Example showing clipping of polygon with box <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> std::vector&lt;boost::geometry::polygon&lt;P&gt; &gt; PV;
<a class="code" href="classboost_1_1geometry_1_1box.html" title="Class box: defines a box made of two describing points.">boost::geometry::box&lt;P&gt;</a> cb(P(1.5, 1.5), P(4.5, 2.5));
<a class="code" href="classboost_1_1geometry_1_1polygon.html" title="The polygon contains an outer ring and zero or more inner rings.">boost::geometry::polygon&lt;P&gt;</a> poly;
boost::geometry::read_wkt(<span class="stringliteral">"POLYGON((2 1.3,2.4 1.7,2.8 1.8,3.4 1.2,3.7 1.6,3.4 2,4.1 3,5.3 2.6,5.4 1.2,4.9 0.8,2.9 0.7,2 1.3)"</span>
<span class="stringliteral">",(4 2,4.2 1.4,4.8 1.9,4.4 2.2,4 2))"</span>, poly);
PV v;
boost::geometry::intersection_inserter&lt;boost::geometry::polygon&lt;P&gt; &gt;(cb, poly, std::back_inserter(v));
std::cout &lt;&lt; <span class="stringliteral">"Clipped polygon(s) "</span> &lt;&lt; std::endl;
<span class="keywordflow">for</span> (PV::const_iterator it = v.begin(); it != v.end(); it++)
{
std::cout &lt;&lt; <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(*it) &lt;&lt; std::endl;
}
</pre></div> </dd></dl>
<hr><h2>Function Documentation</h2>
<a class="anchor" name="g46db306c194d2b17833c524de43edfe8"></a><!-- doxytag: member="boost::geometry::intersection_inserter" ref="g46db306c194d2b17833c524de43edfe8" args="(Geometry1 const &amp;geometry1, Geometry2 const &amp;geometry2, OutputIterator out, Strategy const &amp;strategy)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator , typename Strategy &gt; </div>
<table class="memname">
<tr>
<td class="memname">OutputIterator boost::geometry::intersection_inserter </td>
<td>(</td>
<td class="paramtype">Geometry1 const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Geometry2 const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry2</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">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>
Intersects two geometries.
<p>
The two input geometries are intersected and the resulting linestring(s), ring(s) or polygon(s) are sent to the specified output operator. <dl compact><dt><b>Template Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>GeometryOut</em>&nbsp;</td><td>output <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> type, must be specified </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Geometry1</em>&nbsp;</td><td>first <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> type </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Geometry2</em>&nbsp;</td><td>second <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> type </td></tr>
<tr><td valign="top"></td><td valign="top"><em>OutputIterator</em>&nbsp;</td><td>output iterator </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Strategy</em>&nbsp;</td><td>compound <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> for intersection </td></tr>
</table>
</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>geometry1</em>&nbsp;</td><td>first <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> </td></tr>
<tr><td valign="top"></td><td valign="top"><em>geometry2</em>&nbsp;</td><td>second <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out</em>&nbsp;</td><td>the output iterator, outputting linestrings or polygons </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>the <a class="el" href="namespaceboost_1_1geometry_1_1strategy.html">strategy</a> </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>the output iterator </dd></dl>
<p>Definition at line <a class="el" href="algorithms_2intersection_8hpp_source.html#l00304">304</a> of file <a class="el" href="algorithms_2intersection_8hpp_source.html">intersection.hpp</a>.</p>
</div>
</div><p>
<a class="anchor" name="gb6d39de5ae990bc08704bedc7deb2a6f"></a><!-- doxytag: member="boost::geometry::intersection_inserter" ref="gb6d39de5ae990bc08704bedc7deb2a6f" args="(Geometry1 const &amp;geometry1, Geometry2 const &amp;geometry2, OutputIterator out)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator &gt; </div>
<table class="memname">
<tr>
<td class="memname">OutputIterator boost::geometry::intersection_inserter </td>
<td>(</td>
<td class="paramtype">Geometry1 const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">Geometry2 const &amp;&nbsp;</td>
<td class="paramname"> <em>geometry2</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">OutputIterator&nbsp;</td>
<td class="paramname"> <em>out</em></td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>
Intersects two geometries.
<p>
The two input geometries are intersected and the resulting linestring(s), ring(s) or polygon(s) are sent to the specified output operator. <dl compact><dt><b>Template Parameters:</b></dt><dd>
<table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"></td><td valign="top"><em>GeometryOut</em>&nbsp;</td><td>output <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> type, must be specified </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Geometry1</em>&nbsp;</td><td>first <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> type </td></tr>
<tr><td valign="top"></td><td valign="top"><em>Geometry2</em>&nbsp;</td><td>second <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> type </td></tr>
<tr><td valign="top"></td><td valign="top"><em>OutputIterator</em>&nbsp;</td><td>output iterator </td></tr>
</table>
</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>geometry1</em>&nbsp;</td><td>first <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> </td></tr>
<tr><td valign="top"></td><td valign="top"><em>geometry2</em>&nbsp;</td><td>second <a class="el" href="namespaceboost_1_1geometry.html">geometry</a> </td></tr>
<tr><td valign="top"></td><td valign="top"><em>out</em>&nbsp;</td><td>the output iterator, outputting linestrings or polygons </td></tr>
</table>
</dl>
<dl class="return" compact><dt><b>Returns:</b></dt><dd>the output iterator </dd></dl>
<p>Definition at line <a class="el" href="algorithms_2intersection_8hpp_source.html#l00360">360</a> of file <a class="el" href="algorithms_2intersection_8hpp_source.html">intersection.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>