Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / geometry / doc / html / geometry / reference / algorithms / is_valid / is_valid_3_with_failure_value_and_strategy.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>is_valid (with failure value and 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&#160;1.&#160;Geometry">
8 <link rel="up" href="../is_valid.html" title="is_valid">
9 <link rel="prev" href="is_valid_1.html" title="is_valid">
10 <link rel="next" href="is_valid_2_with_failure_value.html" title="is_valid (with failure value)">
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="is_valid_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../is_valid.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="is_valid_2_with_failure_value.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.is_valid.is_valid_3_with_failure_value_and_strategy"></a><a class="link" href="is_valid_3_with_failure_value_and_strategy.html" title="is_valid (with failure value and strategy)">is_valid
28           (with failure value and strategy)</a>
29 </h5></div></div></div>
30 <p>
31             <a class="indexterm" name="idm46186996333360"></a>
32 Checks if a geometry is valid (in the OGC sense)
33           </p>
34 <h6>
35 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h0"></a>
36             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.synopsis"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.synopsis">Synopsis</a>
37           </h6>
38 <p>
39 </p>
40 <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">,</span> <span class="keyword">typename</span> <span class="identifier">Strategy</span><span class="special">&gt;</span>
41 <span class="keyword">bool</span> <span class="identifier">is_valid</span><span class="special">(</span><span class="identifier">Geometry</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">geometry</span><span class="special">,</span> <span class="identifier">validity_failure_type</span> <span class="special">&amp;</span> <span class="identifier">failure</span><span class="special">,</span> <span class="identifier">Strategy</span> <span class="keyword">const</span> <span class="special">&amp;</span> <span class="identifier">strategy</span><span class="special">)</span></pre>
42 <p>
43           </p>
44 <h6>
45 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h1"></a>
46             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.parameters"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.parameters">Parameters</a>
47           </h6>
48 <div class="informaltable"><table class="table">
49 <colgroup>
50 <col>
51 <col>
52 <col>
53 <col>
54 </colgroup>
55 <thead><tr>
56 <th>
57                     <p>
58                       Type
59                     </p>
60                   </th>
61 <th>
62                     <p>
63                       Concept
64                     </p>
65                   </th>
66 <th>
67                     <p>
68                       Name
69                     </p>
70                   </th>
71 <th>
72                     <p>
73                       Description
74                     </p>
75                   </th>
76 </tr></thead>
77 <tbody>
78 <tr>
79 <td>
80                     <p>
81                       Geometry const &amp;
82                     </p>
83                   </td>
84 <td>
85                     <p>
86                       Any type fulfilling a Geometry Concept
87                     </p>
88                   </td>
89 <td>
90                     <p>
91                       geometry
92                     </p>
93                   </td>
94 <td>
95                     <p>
96                       A model of the specified concept
97                     </p>
98                   </td>
99 </tr>
100 <tr>
101 <td>
102                     <p>
103                       validity_failure_type &amp;
104                     </p>
105                   </td>
106 <td>
107                   </td>
108 <td>
109                     <p>
110                       failure
111                     </p>
112                   </td>
113 <td>
114                     <p>
115                       An enumeration value indicating that the geometry is valid
116                       or not, and if not valid indicating the reason why
117                     </p>
118                   </td>
119 </tr>
120 <tr>
121 <td>
122                     <p>
123                       Strategy const &amp;
124                     </p>
125                   </td>
126 <td>
127                     <p>
128                       Any type fulfilling a Is_valid Strategy Concept
129                     </p>
130                   </td>
131 <td>
132                     <p>
133                       strategy
134                     </p>
135                   </td>
136 <td>
137                     <p>
138                       The strategy which will be used for is_valid calculations
139                     </p>
140                   </td>
141 </tr>
142 </tbody>
143 </table></div>
144 <h6>
145 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h2"></a>
146             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.returns"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.returns">Returns</a>
147           </h6>
148 <p>
149             Returns true if the geometry is valid (in the OGC sense); furthermore,
150             the following geometries are considered valid: multi-geometries with
151             no elements, linear geometries containing spikes, areal geometries with
152             duplicate (consecutive) points
153           </p>
154 <h6>
155 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h3"></a>
156             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.header"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.header">Header</a>
157           </h6>
158 <p>
159             Either
160           </p>
161 <p>
162             <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>
163           </p>
164 <p>
165             Or
166           </p>
167 <p>
168             <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">is_valid</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span></code>
169           </p>
170 <h6>
171 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h4"></a>
172             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.conformance"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.conformance">Conformance</a>
173           </h6>
174 <p>
175             The function is_valid is not defined by OGC.
176           </p>
177 <h6>
178 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h5"></a>
179             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.supported_geometries"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.supported_geometries">Supported
180             geometries</a>
181           </h6>
182 <div class="informaltable"><table class="table">
183 <colgroup>
184 <col>
185 <col>
186 </colgroup>
187 <thead><tr>
188 <th>
189                     <p>
190                       Geometry
191                     </p>
192                   </th>
193 <th>
194                     <p>
195                       Status
196                     </p>
197                   </th>
198 </tr></thead>
199 <tbody>
200 <tr>
201 <td>
202                     <p>
203                       Point
204                     </p>
205                   </td>
206 <td>
207                     <p>
208                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
209                     </p>
210                   </td>
211 </tr>
212 <tr>
213 <td>
214                     <p>
215                       Segment
216                     </p>
217                   </td>
218 <td>
219                     <p>
220                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
221                     </p>
222                   </td>
223 </tr>
224 <tr>
225 <td>
226                     <p>
227                       Box
228                     </p>
229                   </td>
230 <td>
231                     <p>
232                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
233                     </p>
234                   </td>
235 </tr>
236 <tr>
237 <td>
238                     <p>
239                       Linestring
240                     </p>
241                   </td>
242 <td>
243                     <p>
244                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
245                     </p>
246                   </td>
247 </tr>
248 <tr>
249 <td>
250                     <p>
251                       Ring
252                     </p>
253                   </td>
254 <td>
255                     <p>
256                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
257                     </p>
258                   </td>
259 </tr>
260 <tr>
261 <td>
262                     <p>
263                       Polygon
264                     </p>
265                   </td>
266 <td>
267                     <p>
268                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
269                     </p>
270                   </td>
271 </tr>
272 <tr>
273 <td>
274                     <p>
275                       MultiPoint
276                     </p>
277                   </td>
278 <td>
279                     <p>
280                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
281                     </p>
282                   </td>
283 </tr>
284 <tr>
285 <td>
286                     <p>
287                       MultiLinestring
288                     </p>
289                   </td>
290 <td>
291                     <p>
292                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
293                     </p>
294                   </td>
295 </tr>
296 <tr>
297 <td>
298                     <p>
299                       MultiPolygon
300                     </p>
301                   </td>
302 <td>
303                     <p>
304                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
305                     </p>
306                   </td>
307 </tr>
308 <tr>
309 <td>
310                     <p>
311                       Variant
312                     </p>
313                   </td>
314 <td>
315                     <p>
316                       <span class="inlinemediaobject"><img src="../../../../img/ok.png" alt="ok"></span>
317                     </p>
318                   </td>
319 </tr>
320 </tbody>
321 </table></div>
322 <h6>
323 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h6"></a>
324             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.complexity"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.complexity">Complexity</a>
325           </h6>
326 <p>
327             Constant-time for points, segments, boxes and multi-points
328           </p>
329 <p>
330             Linear for linestrings and multi-linestrings
331           </p>
332 <p>
333             Linearithmic for rings
334           </p>
335 <p>
336             Currently, worst-case quadratic for polygons and multi-polygons
337           </p>
338 <h6>
339 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h7"></a>
340             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.example"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.example">Example</a>
341           </h6>
342 <p>
343             Checks whether a geometry is valid and, if not valid, checks if it could
344             be fixed by bg::correct; if so bg::correct is called on the geometry
345           </p>
346 <p>
347 </p>
348 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
349
350 <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>
351 <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">point_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
352 <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>
353
354
355 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
356 <span class="special">{</span>
357     <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">d2</span><span class="special">::</span><span class="identifier">point_xy</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;</span> <span class="identifier">point_type</span><span class="special">;</span>
358     <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><span class="special">&lt;</span><span class="identifier">point_type</span><span class="special">&gt;</span> <span class="identifier">polygon_type</span><span class="special">;</span>
359
360     <span class="identifier">polygon_type</span> <span class="identifier">poly</span><span class="special">;</span>
361     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">read_wkt</span><span class="special">(</span><span class="string">"POLYGON((0 0,0 10,10 10,10 0),(0 0,9 2,9 1,0 0),(0 0,2 9,1 9,0 0))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
362
363     <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"original geometry: "</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">poly</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>
364     <span class="identifier">boost</span><span class="special">::</span><span class="identifier">geometry</span><span class="special">::</span><span class="identifier">validity_failure_type</span> <span class="identifier">failure</span><span class="special">;</span>
365     <span class="keyword">bool</span> <span class="identifier">valid</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">is_valid</span><span class="special">(</span><span class="identifier">poly</span><span class="special">,</span> <span class="identifier">failure</span><span class="special">);</span>
366
367     <span class="comment">// if the invalidity is only due to lack of closing points and/or wrongly oriented rings, then bg::correct can fix it</span>
368     <span class="keyword">bool</span> <span class="identifier">could_be_fixed</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">failure</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">failure_not_closed</span>
369                            <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">failure_wrong_orientation</span><span class="special">);</span>
370     <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"is valid? "</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">valid</span> <span class="special">?</span> <span class="string">"yes"</span> <span class="special">:</span> <span class="string">"no"</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>
371     <span class="keyword">if</span> <span class="special">(!</span> <span class="identifier">valid</span><span class="special">)</span>
372     <span class="special">{</span>
373         <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"can boost::geometry::correct remedy invalidity? "</span> <span class="special">&lt;&lt;</span> <span class="special">(</span><span class="identifier">could_be_fixed</span> <span class="special">?</span> <span class="string">"possibly yes"</span> <span class="special">:</span> <span class="string">"no"</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>
374         <span class="keyword">if</span> <span class="special">(</span><span class="identifier">could_be_fixed</span><span class="special">)</span>
375         <span class="special">{</span>
376             <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">poly</span><span class="special">);</span>
377             <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"after correction: "</span> <span class="special">&lt;&lt;</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">is_valid</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">?</span> <span class="string">"valid"</span> <span class="special">:</span> <span class="string">"still invalid"</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>
378             <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"corrected geometry: "</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">poly</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>
379         <span class="special">}</span>
380     <span class="special">}</span>
381
382     <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
383 <span class="special">}</span>
384 </pre>
385 <p>
386           </p>
387 <p>
388             Output:
389           </p>
390 <pre class="programlisting">original geometry: (((0, 0), (0, 10), (10, 10), (10, 0)), ((0, 0), (9, 2), (9, 1), (0, 0)), ((0, 0), (2, 9), (1, 9), (0, 0)))
391 is valid? no
392 can boost::geometry::correct remedy invalidity? possibly yes
393 after correction: valid
394 corrected geometry: (((0, 0), (0, 10), (10, 10), (10, 0), (0, 0)), ((0, 0), (9, 1), (9, 2), (0, 0)), ((0, 0), (2, 9), (1, 9), (0, 0)))
395
396 <img src="../../../../img/algorithms/is_valid_failure_example.png" alt="is_valid_failure_example">
397
398 </pre>
399 <h6>
400 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.h8"></a>
401             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.see_also"></a></span><a class="link" href="is_valid_3_with_failure_value_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_failure_value_and_strategy.see_also">See
402             also</a>
403           </h6>
404 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
405 <li class="listitem">
406                 <a class="link" href="../is_simple.html" title="is_simple">is_simple</a>
407               </li>
408 <li class="listitem">
409                 <a class="link" href="../../enumerations/validity_failure_type.html" title="validity_failure_type">validity_failure_type</a>
410               </li>
411 </ul></div>
412 </div>
413 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
414 <td align="left"></td>
415 <td align="right"><div class="copyright-footer">Copyright &#169; 2009-2019 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam
416       Wulkiewicz, Oracle and/or its affiliates<p>
417         Distributed under the Boost Software License, Version 1.0. (See accompanying
418         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>)
419       </p>
420 </div></td>
421 </tr></table>
422 <hr>
423 <div class="spirit-nav">
424 <a accesskey="p" href="is_valid_1.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../is_valid.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="is_valid_2_with_failure_value.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
425 </div>
426 </body>
427 </html>