1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>correct (with strategy)</title> 5<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../../../index.html" title="Chapter 1. Geometry"> 8<link rel="up" href="../correct.html" title="correct"> 9<link rel="prev" href="correct_1.html" title="correct"> 10<link rel="next" href="../covered_by.html" title="covered_by"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="correct_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../correct.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../covered_by.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h5 class="title"> 27<a name="geometry.reference.algorithms.correct.correct_2_with_strategy"></a><a class="link" href="correct_2_with_strategy.html" title="correct (with strategy)">correct 28 (with strategy)</a> 29</h5></div></div></div> 30<p> 31 <a class="indexterm" name="idm45635703893648"></a> 32Corrects a geometry. 33 </p> 34<h6> 35<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h0"></a> 36 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.description"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.description">Description</a> 37 </h6> 38<p> 39 Corrects a geometry: all rings which are wrongly oriented with respect 40 to their expected orientation are reversed. To all rings which do not 41 have a closing point and are typed as they should have one, the first 42 point is appended. Also boxes can be corrected. 43 </p> 44<h6> 45<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h1"></a> 46 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.synopsis"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.synopsis">Synopsis</a> 47 </h6> 48<p> 49</p> 50<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Geometry</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">></span> 51<span class="keyword">void</span> <span class="identifier">correct</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="special">&</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&</span> <span class="identifier">strategy</span><span class="special">)</span></pre> 52<p> 53 </p> 54<h6> 55<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h2"></a> 56 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.parameters"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.parameters">Parameters</a> 57 </h6> 58<div class="informaltable"><table class="table"> 59<colgroup> 60<col> 61<col> 62<col> 63<col> 64</colgroup> 65<thead><tr> 66<th> 67 <p> 68 Type 69 </p> 70 </th> 71<th> 72 <p> 73 Concept 74 </p> 75 </th> 76<th> 77 <p> 78 Name 79 </p> 80 </th> 81<th> 82 <p> 83 Description 84 </p> 85 </th> 86</tr></thead> 87<tbody> 88<tr> 89<td> 90 <p> 91 Geometry & 92 </p> 93 </td> 94<td> 95 <p> 96 Any type fulfilling a Geometry Concept 97 </p> 98 </td> 99<td> 100 <p> 101 geometry 102 </p> 103 </td> 104<td> 105 <p> 106 A model of the specified concept which will be corrected if 107 necessary 108 </p> 109 </td> 110</tr> 111<tr> 112<td> 113 <p> 114 Strategy const & 115 </p> 116 </td> 117<td> 118 <p> 119 Any type fulfilling a Area Strategy Concept 120 </p> 121 </td> 122<td> 123 <p> 124 strategy 125 </p> 126 </td> 127<td> 128 <p> 129 The strategy which will be used for area calculations 130 </p> 131 </td> 132</tr> 133</tbody> 134</table></div> 135<h6> 136<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h3"></a> 137 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.header"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.header">Header</a> 138 </h6> 139<p> 140 Either 141 </p> 142<p> 143 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 144 </p> 145<p> 146 Or 147 </p> 148<p> 149 <code class="computeroutput"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">algorithms</span><span class="special">/</span><span class="identifier">correct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 150 </p> 151<h6> 152<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h4"></a> 153 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.conformance"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.conformance">Conformance</a> 154 </h6> 155<p> 156 The function correct is not defined by OGC. 157 </p> 158<h6> 159<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h5"></a> 160 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.supported_geometries"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.supported_geometries">Supported 161 geometries</a> 162 </h6> 163<div class="informaltable"><table class="table"> 164<colgroup> 165<col> 166<col> 167</colgroup> 168<thead><tr> 169<th> 170 <p> 171 Geometry 172 </p> 173 </th> 174<th> 175 <p> 176 Status 177 </p> 178 </th> 179</tr></thead> 180<tbody> 181<tr> 182<td> 183 <p> 184 Point 185 </p> 186 </td> 187<td> 188 <p> 189 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 190 </p> 191 </td> 192</tr> 193<tr> 194<td> 195 <p> 196 Segment 197 </p> 198 </td> 199<td> 200 <p> 201 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 202 </p> 203 </td> 204</tr> 205<tr> 206<td> 207 <p> 208 Box 209 </p> 210 </td> 211<td> 212 <p> 213 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 214 </p> 215 </td> 216</tr> 217<tr> 218<td> 219 <p> 220 Linestring 221 </p> 222 </td> 223<td> 224 <p> 225 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 226 </p> 227 </td> 228</tr> 229<tr> 230<td> 231 <p> 232 Ring 233 </p> 234 </td> 235<td> 236 <p> 237 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 238 </p> 239 </td> 240</tr> 241<tr> 242<td> 243 <p> 244 Polygon 245 </p> 246 </td> 247<td> 248 <p> 249 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 250 </p> 251 </td> 252</tr> 253<tr> 254<td> 255 <p> 256 MultiPoint 257 </p> 258 </td> 259<td> 260 <p> 261 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 262 </p> 263 </td> 264</tr> 265<tr> 266<td> 267 <p> 268 MultiLinestring 269 </p> 270 </td> 271<td> 272 <p> 273 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 274 </p> 275 </td> 276</tr> 277<tr> 278<td> 279 <p> 280 MultiPolygon 281 </p> 282 </td> 283<td> 284 <p> 285 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 286 </p> 287 </td> 288</tr> 289<tr> 290<td> 291 <p> 292 Variant 293 </p> 294 </td> 295<td> 296 <p> 297 <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span> 298 </p> 299 </td> 300</tr> 301</tbody> 302</table></div> 303<h6> 304<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h6"></a> 305 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.behavior"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.behavior">Behavior</a> 306 </h6> 307<div class="informaltable"><table class="table"> 308<colgroup> 309<col> 310<col> 311</colgroup> 312<thead><tr> 313<th> 314 <p> 315 Case 316 </p> 317 </th> 318<th> 319 <p> 320 Behavior 321 </p> 322 </th> 323</tr></thead> 324<tbody> 325<tr> 326<td> 327 <p> 328 Ring 329 </p> 330 </td> 331<td> 332 <p> 333 Ring is corrected 334 </p> 335 </td> 336</tr> 337<tr> 338<td> 339 <p> 340 Polygon 341 </p> 342 </td> 343<td> 344 <p> 345 Polygon is corrected 346 </p> 347 </td> 348</tr> 349<tr> 350<td> 351 <p> 352 Multi Polygon 353 </p> 354 </td> 355<td> 356 <p> 357 Multi Polygon is corrected 358 </p> 359 </td> 360</tr> 361<tr> 362<td> 363 <p> 364 Box 365 </p> 366 </td> 367<td> 368 <p> 369 Box is corrected with respect to minimal and maximal corners 370 </p> 371 </td> 372</tr> 373<tr> 374<td> 375 <p> 376 Other geometries 377 </p> 378 </td> 379<td> 380 <p> 381 Nothing happens, geometry is unchanged 382 </p> 383 </td> 384</tr> 385</tbody> 386</table></div> 387<h6> 388<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h7"></a> 389 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.complexity"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.complexity">Complexity</a> 390 </h6> 391<p> 392 Linear 393 </p> 394<h6> 395<a name="geometry.reference.algorithms.correct.correct_2_with_strategy.h8"></a> 396 <span class="phrase"><a name="geometry.reference.algorithms.correct.correct_2_with_strategy.example"></a></span><a class="link" href="correct_2_with_strategy.html#geometry.reference.algorithms.correct.correct_2_with_strategy.example">Example</a> 397 </h6> 398<p> 399 Shows how to correct a polygon with respect to its orientation and closure 400 </p> 401<p> 402</p> 403<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> 404 405<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 406<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">polygon</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 407<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">geometry</span><span class="special">/</span><span class="identifier">geometries</span><span class="special">/</span><span class="identifier">adapted</span><span class="special">/</span><span class="identifier">boost_tuple</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 408 409<span class="identifier">BOOST_GEOMETRY_REGISTER_BOOST_TUPLE_CS</span><span class="special">(</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">)</span> 410 411<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assign</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 412 413<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 414<span class="special">{</span> 415 <span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">assign</span><span class="special">::</span><span class="identifier">tuple_list_of</span><span class="special">;</span> 416 417 <span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">polygon</span> 418 <span class="special"><</span> 419 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">tuple</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">int</span><span class="special">></span> 420 <span class="special">></span> <span class="identifier">clockwise_closed_polygon</span><span class="special">;</span> 421 422 <span class="identifier">clockwise_closed_polygon</span> <span class="identifier">cwcp</span><span class="special">;</span> 423 424 <span class="comment">// Fill it counterclockwise (so wrongly), forgetting the closing point</span> 425 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">exterior_ring</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">)</span> <span class="special">=</span> <span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">)(</span><span class="number">10</span><span class="special">,</span> <span class="number">10</span><span class="special">)(</span><span class="number">0</span><span class="special">,</span> <span class="number">9</span><span class="special">);</span> 426 427 <span class="comment">// Add a counterclockwise closed inner ring (this is correct)</span> 428 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">interior_rings</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">).</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">tuple_list_of</span><span class="special">(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">)(</span><span class="number">4</span><span class="special">,</span> <span class="number">6</span><span class="special">)(</span><span class="number">2</span><span class="special">,</span> <span class="number">8</span><span class="special">)(</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">));</span> 429 430 <span class="comment">// Its area should be negative (because of wrong orientation)</span> 431 <span class="comment">// and wrong (because of omitted closing point)</span> 432 <span class="keyword">double</span> <span class="identifier">area_before</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span> 433 434 <span class="comment">// Correct it!</span> 435 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">correct</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span> 436 437 <span class="comment">// Check its new area</span> 438 <span class="keyword">double</span> <span class="identifier">area_after</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">area</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">);</span> 439 440 <span class="comment">// And output it</span> 441 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">dsv</span><span class="special">(</span><span class="identifier">cwcp</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 442 <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">area_before</span> <span class="special"><<</span> <span class="string">" -> "</span> <span class="special"><<</span> <span class="identifier">area_after</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> 443 444 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span> 445<span class="special">}</span> 446</pre> 447<p> 448 </p> 449<p> 450 Output: 451 </p> 452<pre class="programlisting">(((0, 0), (0, 9), (10, 10), (0, 0)), ((1, 2), (4, 6), (2, 8), (1, 2))) 453-7 -> 38 454</pre> 455</div> 456<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 457<td align="left"></td> 458<td align="right"><div class="copyright-footer">Copyright © 2009-2019 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam 459 Wulkiewicz, Oracle and/or its affiliates<p> 460 Distributed under the Boost Software License, Version 1.0. (See accompanying 461 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 462 </p> 463</div></td> 464</tr></table> 465<hr> 466<div class="spirit-nav"> 467<a accesskey="p" href="correct_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../correct.html"><img src="../../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../../index.html"><img src="../../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../covered_by.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 468</div> 469</body> 470</html> 471