geos_390_docs/classgeos_1_1operation_1_1o...

740 lines
37 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::OverlayNGRobust 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_1OverlayNGRobust.html">OverlayNGRobust</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<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_1OverlayNGRobust-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">geos::operation::overlayng::OverlayNGRobust Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p><code>#include &lt;<a class="el" href="OverlayNGRobust_8h_source.html">OverlayNGRobust.h</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classgeos_1_1operation_1_1overlayng_1_1OverlayNGRobust_1_1SRUnionStrategy.html">SRUnionStrategy</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:a19d2ff7c2f40feb27d0a00396a9d55f0"><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_1OverlayNGRobust.html#a19d2ff7c2f40feb27d0a00396a9d55f0">Intersection</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g1)</td></tr>
<tr class="separator:a19d2ff7c2f40feb27d0a00396a9d55f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a766fa4359e0939c2045dfaf80cfc2a8d"><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_1OverlayNGRobust.html#a766fa4359e0939c2045dfaf80cfc2a8d">Union</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g1)</td></tr>
<tr class="separator:a766fa4359e0939c2045dfaf80cfc2a8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a49c85df79b33156a2963059359f8594e"><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_1OverlayNGRobust.html#a49c85df79b33156a2963059359f8594e">Difference</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g1)</td></tr>
<tr class="separator:a49c85df79b33156a2963059359f8594e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad5ba9120503412e169ee60123b4fc83c"><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_1OverlayNGRobust.html#ad5ba9120503412e169ee60123b4fc83c">SymDifference</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *g1)</td></tr>
<tr class="separator:ad5ba9120503412e169ee60123b4fc83c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8eef78f8f08b674452e03f99d8a5f5db"><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_1OverlayNGRobust.html#a8eef78f8f08b674452e03f99d8a5f5db">Union</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *a)</td></tr>
<tr class="separator:a8eef78f8f08b674452e03f99d8a5f5db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c2fad00313c2f0b17a9d50058eef7a7"><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_1OverlayNGRobust.html#a8c2fad00313c2f0b17a9d50058eef7a7">Overlay</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1, int opCode)</td></tr>
<tr class="separator:a8c2fad00313c2f0b17a9d50058eef7a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a664792f4bd427308bd725a16e43410db"><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_1OverlayNGRobust.html#a664792f4bd427308bd725a16e43410db">overlaySnapTries</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1, int opCode)</td></tr>
<tr class="separator:a664792f4bd427308bd725a16e43410db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04180f1494902e6e1f235f1289e2048c"><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_1OverlayNGRobust.html#a04180f1494902e6e1f235f1289e2048c">snapTolerance</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1)</td></tr>
<tr class="separator:a04180f1494902e6e1f235f1289e2048c"><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:a2899a071082d582839eef956603a2a97"><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_1OverlayNGRobust.html#a2899a071082d582839eef956603a2a97">overlaySnapping</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1, int opCode, double snapTol)</td></tr>
<tr class="separator:a2899a071082d582839eef956603a2a97"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d06af03ddfe31cc74401bcc32d422db"><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_1OverlayNGRobust.html#a2d06af03ddfe31cc74401bcc32d422db">overlaySnapBoth</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1, int opCode, double snapTol)</td></tr>
<tr class="separator:a2d06af03ddfe31cc74401bcc32d422db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a84f46ea1ef62e896de399212d001c8c0"><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_1OverlayNGRobust.html#a84f46ea1ef62e896de399212d001c8c0">overlaySnapTol</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1, int opCode, double snapTol)</td></tr>
<tr class="separator:a84f46ea1ef62e896de399212d001c8c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a994e91609cdd0817c1d0526dd5c60ccc"><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_1OverlayNGRobust.html#a994e91609cdd0817c1d0526dd5c60ccc">snapTolerance</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom)</td></tr>
<tr class="separator:a994e91609cdd0817c1d0526dd5c60ccc"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a886de1a438bb5a9e47affa10260d0c"><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_1OverlayNGRobust.html#a4a886de1a438bb5a9e47affa10260d0c">ordinateMagnitude</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom)</td></tr>
<tr class="separator:a4a886de1a438bb5a9e47affa10260d0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a72ab086c6f0e70fd63f52e4f941ee9a2"><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_1OverlayNGRobust.html#a72ab086c6f0e70fd63f52e4f941ee9a2">overlaySR</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom0, const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom1, int opCode)</td></tr>
<tr class="separator:a72ab086c6f0e70fd63f52e4f941ee9a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae1c027a582b34396278c33fc89ebd9c3"><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_1OverlayNGRobust.html#ae1c027a582b34396278c33fc89ebd9c3">snapSelf</a> (const <a class="el" href="classgeos_1_1geom_1_1Geometry.html">Geometry</a> *geom, double snapTol)</td></tr>
<tr class="separator:ae1c027a582b34396278c33fc89ebd9c3"><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:aad1e4249c47d92635d4c6e553eec3b00"><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_1OverlayNGRobust.html#aad1e4249c47d92635d4c6e553eec3b00">NUM_SNAP_TRIES</a> = 5</td></tr>
<tr class="separator:aad1e4249c47d92635d4c6e553eec3b00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3825ab7eed18673405a5f98bd1cc8b4b"><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_1OverlayNGRobust.html#a3825ab7eed18673405a5f98bd1cc8b4b">SNAP_TOL_FACTOR</a> = 1e12</td></tr>
<tr class="separator:a3825ab7eed18673405a5f98bd1cc8b4b"><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>Performs an overlay operation, increasing robustness by using a series of increasingly aggressive (and slower) noding strategies.</p>
<p>The noding strategies used are:</p>
<ul>
<li>A simple, fast noder using FLOATING precision.</li>
<li>A <a class="el" href="classgeos_1_1noding_1_1snap_1_1SnappingNoder.html">noding::snap::SnappingNoder</a> using an automatically-determined snap tolerance</li>
<li>First snapping each geometry to itself, and then overlaying them using a SnappingNoder.</li>
<li>The above two strategies are repeated with increasing snap tolerance, up to a limit.</li>
</ul>
<p>If the above heuristics still fail to compute a valid overlay, the original <a class="el" href="classgeos_1_1util_1_1TopologyException.html">util::TopologyException</a> is thrown.</p>
<p>This algorithm relies on each overlay operation execution throwing a <a class="el" href="classgeos_1_1util_1_1TopologyException.html">util::TopologyException</a> if it is unable to compute the overlay correctly. Generally this occurs because the noding phase does not produce a valid noding. This requires the use of a <a class="el" href="classgeos_1_1noding_1_1ValidatingNoder.html">noding::ValidatingNoder</a> in order to check the results of using a floating noder.</p>
<dl class="section author"><dt>Author</dt><dd>Martin Davis </dd></dl>
<p>Definition at line <a class="el" href="OverlayNGRobust_8h_source.html#l00064">64</a> of file <a class="el" href="OverlayNGRobust_8h_source.html">OverlayNGRobust.h</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a49c85df79b33156a2963059359f8594e"></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::OverlayNGRobust::Difference </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>g0</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>g1</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>
<a class="anchor" id="a19d2ff7c2f40feb27d0a00396a9d55f0"></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::OverlayNGRobust::Intersection </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>g0</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>g1</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>
<a class="anchor" id="a4a886de1a438bb5a9e47affa10260d0c"></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::OverlayNGRobust::ordinateMagnitude </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">
<p>Computes the largest magnitude of the ordinates of a geometry, based on the geometry envelope.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">geom</td><td>a geometry </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the magnitude of the largest ordinate </dd></dl>
</div>
</div>
<a class="anchor" id="a8c2fad00313c2f0b17a9d50058eef7a7"></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::OverlayNGRobust::Overlay </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>geom0</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>geom1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</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>
<a class="anchor" id="a2d06af03ddfe31cc74401bcc32d422db"></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::OverlayNGRobust::overlaySnapBoth </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>geom0</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>geom1</em>, </td>
</tr>
<tr>
<td class="paramkey"></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">double&#160;</td>
<td class="paramname"><em>snapTol</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="a2899a071082d582839eef956603a2a97"></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::OverlayNGRobust::overlaySnapping </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>geom0</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>geom1</em>, </td>
</tr>
<tr>
<td class="paramkey"></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">double&#160;</td>
<td class="paramname"><em>snapTol</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="a84f46ea1ef62e896de399212d001c8c0"></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::OverlayNGRobust::overlaySnapTol </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>geom0</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>geom1</em>, </td>
</tr>
<tr>
<td class="paramkey"></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">double&#160;</td>
<td class="paramname"><em>snapTol</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="a664792f4bd427308bd725a16e43410db"></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::OverlayNGRobust::overlaySnapTries </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>geom0</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>geom1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</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>
<a class="anchor" id="a72ab086c6f0e70fd63f52e4f941ee9a2"></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::OverlayNGRobust::overlaySR </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>geom0</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>geom1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>opCode</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>Overlay using Snap-Rounding with an automatically-determined scale factor.</p>
<p>NOTE: currently this strategy is not used, since all known test cases work using one of the Snapping strategies. </p>
</div>
</div>
<a class="anchor" id="ae1c027a582b34396278c33fc89ebd9c3"></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::OverlayNGRobust::snapSelf </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>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">double&#160;</td>
<td class="paramname"><em>snapTol</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>Self-snaps a geometry by running a union operation with it as the only input. This helps to remove narrow spike/gore artifacts to simplify the geometry, which improves robustness. Collapsed artifacts are removed from the result to allow using it in further overlay operations.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">geom</td><td>geometry to self-snap </td></tr>
<tr><td class="paramname">snapTol</td><td>snap tolerance </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the snapped geometry (homogeneous) </dd></dl>
</div>
</div>
<a class="anchor" id="a994e91609cdd0817c1d0526dd5c60ccc"></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::OverlayNGRobust::snapTolerance </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="a04180f1494902e6e1f235f1289e2048c"></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::OverlayNGRobust::snapTolerance </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>geom0</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>geom1</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 heuristic snap tolerance distance for overlaying a pair of geometries using a <a class="el" href="classgeos_1_1noding_1_1snap_1_1SnappingNoder.html">noding::snap::SnappingNoder</a>. </p>
</div>
</div>
<a class="anchor" id="ad5ba9120503412e169ee60123b4fc83c"></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::OverlayNGRobust::SymDifference </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>g0</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>g1</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>
<a class="anchor" id="a766fa4359e0939c2045dfaf80cfc2a8d"></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::OverlayNGRobust::Union </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>g0</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>g1</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>
<a class="anchor" id="a8eef78f8f08b674452e03f99d8a5f5db"></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::OverlayNGRobust::Union </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><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="aad1e4249c47d92635d4c6e553eec3b00"></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::OverlayNGRobust::NUM_SNAP_TRIES = 5</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="OverlayNGRobust_8h_source.html#l00070">70</a> of file <a class="el" href="OverlayNGRobust_8h_source.html">OverlayNGRobust.h</a>.</p>
</div>
</div>
<a class="anchor" id="a3825ab7eed18673405a5f98bd1cc8b4b"></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::OverlayNGRobust::SNAP_TOL_FACTOR = 1e12</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>A factor for a snapping tolerance distance which should allow noding to be computed robustly. </p>
<p>Definition at line <a class="el" href="OverlayNGRobust_8h_source.html#l00075">75</a> of file <a class="el" href="OverlayNGRobust_8h_source.html">OverlayNGRobust.h</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="OverlayNGRobust_8h_source.html">OverlayNGRobust.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>