mirror of
https://github.com/boostorg/geometry.git
synced 2026-02-13 12:32:09 +00:00
275 lines
17 KiB
HTML
275 lines
17 KiB
HTML
<!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">
|
||
|
||
</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 Page</span></a></li>
|
||
<li><a href="pages.html"><span>Related 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<typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator > </td></tr>
|
||
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">OutputIterator </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__intersection.html#gb6d39de5ae990bc08704bedc7deb2a6f">boost::geometry::intersection_inserter</a> (Geometry1 const &geometry1, Geometry2 const &geometry2, OutputIterator out)</td></tr>
|
||
|
||
<tr><td class="mdescLeft"> </td><td class="mdescRight">Intersects two geometries. <a href="#gb6d39de5ae990bc08704bedc7deb2a6f"></a><br></td></tr>
|
||
<tr><td class="memTemplParams" nowrap colspan="2">template<typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator , typename Strategy > </td></tr>
|
||
<tr><td class="memTemplItemLeft" nowrap align="right" valign="top">OutputIterator </td><td class="memTemplItemRight" valign="bottom"><a class="el" href="group__intersection.html#g46db306c194d2b17833c524de43edfe8">boost::geometry::intersection_inserter</a> (Geometry1 const &geometry1, Geometry2 const &geometry2, OutputIterator out, Strategy const &strategy)</td></tr>
|
||
|
||
<tr><td class="mdescLeft"> </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) -> <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) -> <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> -> <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> -> <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 -> <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<double></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<P></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<P></a> cb(P(1.5, 1.5), P(4.5, 2.5));
|
||
std::cout << <span class="stringliteral">"Clipped linestring(s) "</span> << std::endl;
|
||
|
||
std::vector<boost::geometry::linestring<P> > intersection;
|
||
boost::geometry::intersection_inserter<boost::geometry::linestring<P> >(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<double></a> P;
|
||
std::vector<P> vector_in;
|
||
boost::geometry::read_wkt<P>(<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<P></a> cb(P(1.5, 1.5), P(4.5, 2.5));
|
||
<span class="keyword">typedef</span> std::vector<std::vector<P> > VV;
|
||
VV vector_out;
|
||
boost::geometry::intersection_inserter<std::vector<P> >(cb, vector_in, std::back_inserter(vector_out));
|
||
|
||
std::cout << <span class="stringliteral">"Clipped vector(s) "</span> << std::endl;
|
||
<span class="keywordflow">for</span> (VV::const_iterator it = vector_out.begin(); it != vector_out.end(); it++)
|
||
{
|
||
std::copy(it->begin(), it->end(), std::ostream_iterator<P>(std::cout, <span class="stringliteral">" "</span>));
|
||
std::cout << 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<double></a> P;
|
||
<span class="keyword">typedef</span> std::vector<boost::geometry::polygon<P> > 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<P></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<P></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<boost::geometry::polygon<P> >(cb, poly, std::back_inserter(v));
|
||
|
||
std::cout << <span class="stringliteral">"Clipped polygon(s) "</span> << std::endl;
|
||
<span class="keywordflow">for</span> (PV::const_iterator it = v.begin(); it != v.end(); it++)
|
||
{
|
||
std::cout << <a class="code" href="group__utility.html#g62cc5db4d3bb1147591298b3500f8f1a" title="Main DSV-streaming function.">boost::geometry::dsv</a>(*it) << 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 &geometry1, Geometry2 const &geometry2, OutputIterator out, Strategy const &strategy)" -->
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<div class="memtemplate">
|
||
template<typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator , typename Strategy > </div>
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">OutputIterator boost::geometry::intersection_inserter </td>
|
||
<td>(</td>
|
||
<td class="paramtype">Geometry1 const & </td>
|
||
<td class="paramname"> <em>geometry1</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">Geometry2 const & </td>
|
||
<td class="paramname"> <em>geometry2</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">OutputIterator </td>
|
||
<td class="paramname"> <em>out</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">Strategy const & </td>
|
||
<td class="paramname"> <em>strategy</em></td><td> </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> </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> </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> </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> </td><td>output iterator </td></tr>
|
||
<tr><td valign="top"></td><td valign="top"><em>Strategy</em> </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> </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> </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> </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> </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 &geometry1, Geometry2 const &geometry2, OutputIterator out)" -->
|
||
<div class="memitem">
|
||
<div class="memproto">
|
||
<div class="memtemplate">
|
||
template<typename GeometryOut , typename Geometry1 , typename Geometry2 , typename OutputIterator > </div>
|
||
<table class="memname">
|
||
<tr>
|
||
<td class="memname">OutputIterator boost::geometry::intersection_inserter </td>
|
||
<td>(</td>
|
||
<td class="paramtype">Geometry1 const & </td>
|
||
<td class="paramname"> <em>geometry1</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">Geometry2 const & </td>
|
||
<td class="paramname"> <em>geometry2</em>, </td>
|
||
</tr>
|
||
<tr>
|
||
<td class="paramkey"></td>
|
||
<td></td>
|
||
<td class="paramtype">OutputIterator </td>
|
||
<td class="paramname"> <em>out</em></td><td> </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> </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> </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> </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> </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> </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> </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> </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 <a href="http://www.doxygen.org/index.html">Doxygen</a>
|
||
</small></address>
|
||
</body>
|
||
</html>
|