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