geos_390_docs/classgeos_1_1operation_1_1o...

770 lines
38 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.11"/>
<title>GEOS: geos::operation::overlayng::OverlayUtil Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">GEOS
&#160;<span id="projectnumber">3.9.1dev</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.11 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li class="current"><a href="annotated.html"><span>Classes</span></a></li>
<li><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="annotated.html"><span>Class&#160;List</span></a></li>
<li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
<li><a href="functions.html"><span>Class&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacegeos.html">geos</a></li><li class="navelem"><a class="el" href="namespacegeos_1_1operation.html">operation</a></li><li class="navelem"><a class="el" href="namespacegeos_1_1operation_1_1overlayng.html">overlayng</a></li><li class="navelem"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html">OverlayUtil</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pri-static-methods">Static Private Member Functions</a> &#124;
<a href="#pri-static-attribs">Static Private Attributes</a> &#124;
<a href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">geos::operation::overlayng::OverlayUtil Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="OverlayUtil_8h_source.html">OverlayUtil.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a6cd09bddbf8868fdb2bda96f9a73fb4f"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a6cd09bddbf8868fdb2bda96f9a73fb4f">isFloating</a> (const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm)</td></tr>
<tr class="separator:a6cd09bddbf8868fdb2bda96f9a73fb4f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af9d1c355fed3ffe53ade7009a276d74f"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#af9d1c355fed3ffe53ade7009a276d74f">clippingEnvelope</a> (int opCode, const <a class="el" href="classgeos_1_1operation_1_1overlayng_1_1InputGeometry.html">InputGeometry</a> *inputGeom, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm, <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> &amp;rsltEnvelope)</td></tr>
<tr class="separator:af9d1c355fed3ffe53ade7009a276d74f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6b9e8672e8542dd1ffafe901be0b8219"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a6b9e8672e8542dd1ffafe901be0b8219">isEmptyResult</a> (int opCode, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *a, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *b, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm)</td></tr>
<tr class="separator:a6b9e8672e8542dd1ffafe901be0b8219"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98f00f8429b9d82d6ac29df3d35e8a3d"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a98f00f8429b9d82d6ac29df3d35e8a3d">isEnvDisjoint</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *a, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *b, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm)</td></tr>
<tr class="separator:a98f00f8429b9d82d6ac29df3d35e8a3d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a659ab138517acb2af4756d720010cd7f"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a659ab138517acb2af4756d720010cd7f">createEmptyResult</a> (int dim, const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">GeometryFactory</a> *geomFact)</td></tr>
<tr class="separator:a659ab138517acb2af4756d720010cd7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a36ac1e4790988baa25bd5e1fd8d811e0"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a36ac1e4790988baa25bd5e1fd8d811e0">resultDimension</a> (int opCode, int dim0, int dim1)</td></tr>
<tr class="separator:a36ac1e4790988baa25bd5e1fd8d811e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a370098885f1d482bf79a40e95ad7a041"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a370098885f1d482bf79a40e95ad7a041">createResultGeometry</a> (std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Polygon.html">Polygon</a> &gt;&gt; &amp;resultPolyList, std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1LineString.html">LineString</a> &gt;&gt; &amp;resultLineList, std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Point.html">Point</a> &gt;&gt; &amp;resultPointList, const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">GeometryFactory</a> *geometryFactory)</td></tr>
<tr class="separator:a370098885f1d482bf79a40e95ad7a041"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7edfa7322c78c06af3fd6ac98f19789"><td class="memItemLeft" align="right" valign="top">static std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#af7edfa7322c78c06af3fd6ac98f19789">toLines</a> (<a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayGraph.html">OverlayGraph</a> *graph, bool isOutputEdges, const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">GeometryFactory</a> *geomFact)</td></tr>
<tr class="separator:af7edfa7322c78c06af3fd6ac98f19789"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c5339aa0a9db6635e956c5502c2c5ca"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a1c5339aa0a9db6635e956c5502c2c5ca">round</a> (const <a class="el" href="classgeos_1_1geom_1_1Point.html">Point</a> *pt, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm, <a class="el" href="classgeos_1_1geom_1_1Coordinate.html">Coordinate</a> &amp;rsltCoord)</td></tr>
<tr class="separator:a1c5339aa0a9db6635e956c5502c2c5ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afa9884e4ac7847c6e0916d2631581d02"><td class="memTemplParams" colspan="2">template&lt;typename T &gt; </td></tr>
<tr class="memitem:afa9884e4ac7847c6e0916d2631581d02"><td class="memTemplItemLeft" align="right" valign="top">static void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#afa9884e4ac7847c6e0916d2631581d02">moveGeometry</a> (std::vector&lt; std::unique_ptr&lt; T &gt;&gt; &amp;inGeoms, std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> &gt;&gt; &amp;outGeoms)</td></tr>
<tr class="separator:afa9884e4ac7847c6e0916d2631581d02"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-static-methods"></a>
Static Private Member Functions</h2></td></tr>
<tr class="memitem:a1e66f0770c4fad5b8eab3c425096289a"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a1e66f0770c4fad5b8eab3c425096289a">resultEnvelope</a> (int opCode, const <a class="el" href="classgeos_1_1operation_1_1overlayng_1_1InputGeometry.html">InputGeometry</a> *inputGeom, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm, <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> &amp;rsltEnvelope)</td></tr>
<tr class="separator:a1e66f0770c4fad5b8eab3c425096289a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8de3494c8b7e57c210bcd601de8375a5"><td class="memItemLeft" align="right" valign="top">static double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a8de3494c8b7e57c210bcd601de8375a5">safeExpandDistance</a> (const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *env, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm)</td></tr>
<tr class="separator:a8de3494c8b7e57c210bcd601de8375a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0821c338e5eaa9071bbfcca64ffd66ba"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a0821c338e5eaa9071bbfcca64ffd66ba">safeEnv</a> (const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *env, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm, <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> &amp;rsltEnvelope)</td></tr>
<tr class="separator:a0821c338e5eaa9071bbfcca64ffd66ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad8dfc37c7a5283cdbec06065e136192"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#aad8dfc37c7a5283cdbec06065e136192">isEmpty</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom)</td></tr>
<tr class="separator:aad8dfc37c7a5283cdbec06065e136192"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab744fa92e76cdfdf445c5abcebc98486"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#ab744fa92e76cdfdf445c5abcebc98486">isDisjoint</a> (const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *envA, const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *envB, const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *pm)</td></tr>
<tr class="separator:ab744fa92e76cdfdf445c5abcebc98486"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-static-attribs"></a>
Static Private Attributes</h2></td></tr>
<tr class="memitem:a9043f24415683bc2abf234c9800e0c5a"><td class="memItemLeft" align="right" valign="top">static constexpr double&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a9043f24415683bc2abf234c9800e0c5a">SAFE_ENV_BUFFER_FACTOR</a> = 0.1</td></tr>
<tr class="separator:a9043f24415683bc2abf234c9800e0c5a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a957f182ae818481b94c1adeff51a5276"><td class="memItemLeft" align="right" valign="top">static constexpr int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayUtil.html#a957f182ae818481b94c1adeff51a5276">SAFE_ENV_GRID_FACTOR</a> = 3</td></tr>
<tr class="separator:a957f182ae818481b94c1adeff51a5276"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Utility methods for overlay processing.</p>
<dl class="section author"><dt>Author</dt><dd>mdavis </dd></dl>
<p>Definition at line <a class="el" href="OverlayUtil_8h_source.html#l00057">57</a> of file <a class="el" href="OverlayUtil_8h_source.html">OverlayUtil.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="af9d1c355fed3ffe53ade7009a276d74f"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::clippingEnvelope </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1operation_1_1overlayng_1_1InputGeometry.html">InputGeometry</a> *&#160;</td>
<td class="paramname"><em>inputGeom</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> &amp;&#160;</td>
<td class="paramname"><em>rsltEnvelope</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes a clipping envelope for overlay input geometries. The clipping envelope encloses all geometry line segments which might participate in the overlay, with a buffer to account for numerical precision (in particular, rounding due to a precision model. The clipping envelope is used in both the <a class="el" href="classgeos_1_1operation_1_1overlayng_1_1RingClipper.html">RingClipper</a> and in the <a class="el" href="classgeos_1_1operation_1_1overlayng_1_1LineLimiter.html">LineLimiter</a>.</p>
<p>Some overlay operations (i.e. UNION and SYMDIFFERENCE cannot use clipping as an optimization, since the result envelope is the full extent of the two input geometries. In this case the returned envelope is null to indicate this. </p>
</div>
</div>
<a class="anchor" id="a659ab138517acb2af4756d720010cd7f"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static std::unique_ptr&lt;<a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a>&gt; geos::operation::overlayng::OverlayUtil::createEmptyResult </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dim</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">GeometryFactory</a> *&#160;</td>
<td class="paramname"><em>geomFact</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Creates an empty result geometry of the appropriate dimension, based on the given overlay operation and the dimensions of the inputs. The created geometry is an atomic geometry, not a collection (unless the dimension is -1, in which case a GEOMETRYCOLLECTION EMPTY is created.) </p>
</div>
</div>
<a class="anchor" id="a370098885f1d482bf79a40e95ad7a041"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static std::unique_ptr&lt;<a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a>&gt; geos::operation::overlayng::OverlayUtil::createResultGeometry </td>
<td>(</td>
<td class="paramtype">std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Polygon.html">Polygon</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>resultPolyList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1LineString.html">LineString</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>resultLineList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Point.html">Point</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>resultPointList</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">GeometryFactory</a> *&#160;</td>
<td class="paramname"><em>geometryFactory</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Creates an overlay result geometry for homogeneous or mixed components. </p>
</div>
</div>
<a class="anchor" id="ab744fa92e76cdfdf445c5abcebc98486"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::isDisjoint </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *&#160;</td>
<td class="paramname"><em>envA</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *&#160;</td>
<td class="paramname"><em>envB</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Tests for disjoint envelopes adjusting for rounding caused by a fixed precision model. Assumes envelopes are non-empty. </p>
</div>
</div>
<a class="anchor" id="aad8dfc37c7a5283cdbec06065e136192"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::isEmpty </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *&#160;</td>
<td class="paramname"><em>geom</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a6b9e8672e8542dd1ffafe901be0b8219"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::isEmptyResult </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Tests if the result can be determined to be empty based on simple properties of the input geometries (such as whether one or both are empty, or their envelopes are disjoint). </p>
</div>
</div>
<a class="anchor" id="a98f00f8429b9d82d6ac29df3d35e8a3d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::isEnvDisjoint </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *&#160;</td>
<td class="paramname"><em>a</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *&#160;</td>
<td class="paramname"><em>b</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Tests if the geometry envelopes are disjoint, or empty. The disjoint test must take into account the precision model being used, since geometry coordinates may shift under rounding. </p>
</div>
</div>
<a class="anchor" id="a6cd09bddbf8868fdb2bda96f9a73fb4f"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::isFloating </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="afa9884e4ac7847c6e0916d2631581d02"></a>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename T &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static void geos::operation::overlayng::OverlayUtil::moveGeometry </td>
<td>(</td>
<td class="paramtype">std::vector&lt; std::unique_ptr&lt; T &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>inGeoms</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; std::unique_ptr&lt; <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> &gt;&gt; &amp;&#160;</td>
<td class="paramname"><em>outGeoms</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="OverlayUtil_8h_source.html#l00168">168</a> of file <a class="el" href="OverlayUtil_8h_source.html">OverlayUtil.h</a>.</p>
</div>
</div>
<a class="anchor" id="a36ac1e4790988baa25bd5e1fd8d811e0"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static int geos::operation::overlayng::OverlayUtil::resultDimension </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dim0</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>dim1</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes the dimension of the result of applying the given operation to inputs with the given dimensions. This assumes that complete collapse does not occur.</p>
<p>The result dimension is computed according to the following rules:</p><ul>
<li><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayNG.html#ae377cb489b5244fb00b7042948790f02">OverlayNG::INTERSECTION</a> - result has the dimension of the lowest input dimension</li>
<li><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayNG.html#a2f97adb6ea20a65cf6e0be1a9ae515ea">OverlayNG::UNION</a> - result has the dimension of the highest input dimension</li>
<li><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayNG.html#aa9bbd4b0ce9c18a9e43f23b5c4b6e1cd">OverlayNG::DIFFERENCE</a> - result has the dimension of the left-hand input</li>
<li><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayNG.html#a6e8110f8489231588c03bc60fdff81c2">OverlayNG::SYMDIFFERENCE</a> - result has the dimension of the highest input dimension (since the Symmetric Difference is the Union of the Differences). </li>
</ul>
</div>
</div>
<a class="anchor" id="a1e66f0770c4fad5b8eab3c425096289a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::resultEnvelope </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1operation_1_1overlayng_1_1InputGeometry.html">InputGeometry</a> *&#160;</td>
<td class="paramname"><em>inputGeom</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> &amp;&#160;</td>
<td class="paramname"><em>rsltEnvelope</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Computes an envelope which covers the extent of the result of a given overlay operation for given inputs. The operations which have a result envelope smaller than the extent of the inputs are:</p>
<ul>
<li>INTERSECTION: result envelope is the intersection of the input envelopes</li>
<li>DIFERENCE: result envelope is the envelope of the A input geometry</li>
</ul>
<p>Otherwise, <code>null</code> is returned to indicate full extent. </p>
</div>
</div>
<a class="anchor" id="a1c5339aa0a9db6635e956c5502c2c5ca"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::round </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Point.html">Point</a> *&#160;</td>
<td class="paramname"><em>pt</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classgeos_1_1geom_1_1Coordinate.html">Coordinate</a> &amp;&#160;</td>
<td class="paramname"><em>rsltCoord</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Round the key point if precision model is fixed. Note: return value is only copied if rounding is performed. </p>
</div>
</div>
<a class="anchor" id="a0821c338e5eaa9071bbfcca64ffd66ba"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static bool geos::operation::overlayng::OverlayUtil::safeEnv </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> &amp;&#160;</td>
<td class="paramname"><em>rsltEnvelope</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="a8de3494c8b7e57c210bcd601de8375a5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static double geos::operation::overlayng::OverlayUtil::safeExpandDistance </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1Envelope.html">Envelope</a> *&#160;</td>
<td class="paramname"><em>env</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1PrecisionModel.html">PrecisionModel</a> *&#160;</td>
<td class="paramname"><em>pm</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a class="anchor" id="af7edfa7322c78c06af3fd6ac98f19789"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">static std::unique_ptr&lt;<a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a>&gt; geos::operation::overlayng::OverlayUtil::toLines </td>
<td>(</td>
<td class="paramtype"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayGraph.html">OverlayGraph</a> *&#160;</td>
<td class="paramname"><em>graph</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">bool&#160;</td>
<td class="paramname"><em>isOutputEdges</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const <a class="el" href="classgeos_1_1geom_1_1GeometryFactory.html">GeometryFactory</a> *&#160;</td>
<td class="paramname"><em>geomFact</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="a9043f24415683bc2abf234c9800e0c5a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr double geos::operation::overlayng::OverlayUtil::SAFE_ENV_BUFFER_FACTOR = 0.1</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="OverlayUtil_8h_source.html#l00061">61</a> of file <a class="el" href="OverlayUtil_8h_source.html">OverlayUtil.h</a>.</p>
</div>
</div>
<a class="anchor" id="a957f182ae818481b94c1adeff51a5276"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr int geos::operation::overlayng::OverlayUtil::SAFE_ENV_GRID_FACTOR = 3</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Definition at line <a class="el" href="OverlayUtil_8h_source.html#l00062">62</a> of file <a class="el" href="OverlayUtil_8h_source.html">OverlayUtil.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="OverlayUtil_8h_source.html">OverlayUtil.h</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.11
</small></address>
</body>
</html>