Imported Upstream version 1.72.0
[platform/upstream/boost.git] / libs / geometry / doc / html / geometry / reference / algorithms / is_valid / is_valid_3_with_message_and_strategy.html
1 <html>
2 <head>
3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>is_valid (with message 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_2_with_failure_value.html" title="is_valid (with failure value)">
10 <link rel="next" href="is_valid_2_with_message.html" title="is_valid (with message)">
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_2_with_failure_value.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_message.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_message_and_strategy"></a><a class="link" href="is_valid_3_with_message_and_strategy.html" title="is_valid (with message and strategy)">is_valid
28           (with message and strategy)</a>
29 </h5></div></div></div>
30 <p>
31             <a class="indexterm" name="idm46186995792272"></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_message_and_strategy.h0"></a>
36             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.synopsis"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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">std</span><span class="special">::</span><span class="identifier">string</span> <span class="special">&amp;</span> <span class="identifier">message</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_message_and_strategy.h1"></a>
46             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.parameters"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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                       std::string &amp;
104                     </p>
105                   </td>
106 <td>
107                   </td>
108 <td>
109                     <p>
110                       message
111                     </p>
112                   </td>
113 <td>
114                     <p>
115                       A string containing a message stating if the geometry is valid
116                       or not, and if not valid a 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_message_and_strategy.h2"></a>
146             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.returns"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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_message_and_strategy.h3"></a>
156             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.header"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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_message_and_strategy.h4"></a>
172             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.conformance"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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_message_and_strategy.h5"></a>
179             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.supported_geometries"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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_message_and_strategy.h6"></a>
324             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.complexity"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_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_message_and_strategy.h7"></a>
340             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.example"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.example">Example</a>
341           </h6>
342 <p>
343             Checks whether a geometry is valid and, if not valid, prints a message
344             describing the reason
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 <span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span>
350
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">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">point_xy</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
353 <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>
354
355
356 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
357 <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">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>
359     <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>
360
361     <span class="identifier">polygon_type</span> <span class="identifier">poly</span><span class="special">;</span>
362     <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),(0 0,9 1,9 2,0 0),(0 0,2 9,1 9,0 0),(2 9,9 2,9 9,2 9))"</span><span class="special">,</span> <span class="identifier">poly</span><span class="special">);</span>
363
364     <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">message</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">message</span><span class="special">);</span>
366     <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>
367     <span class="keyword">if</span> <span class="special">(!</span> <span class="identifier">valid</span><span class="special">)</span>
368     <span class="special">{</span>
369         <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"why not valid? "</span> <span class="special">&lt;&lt;</span> <span class="identifier">message</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>
370     <span class="special">}</span>
371
372     <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
373 <span class="special">}</span>
374 </pre>
375 <p>
376           </p>
377 <p>
378             Output:
379           </p>
380 <pre class="programlisting">is valid? no
381 why not valid? Geometry has disconnected interior
382
383 <img src="../../../../img/algorithms/is_valid_example.png" alt="is_valid_example">
384
385 </pre>
386 <h6>
387 <a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.h8"></a>
388             <span class="phrase"><a name="geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.see_also"></a></span><a class="link" href="is_valid_3_with_message_and_strategy.html#geometry.reference.algorithms.is_valid.is_valid_3_with_message_and_strategy.see_also">See
389             also</a>
390           </h6>
391 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
392                 <a class="link" href="../is_simple.html" title="is_simple">is_simple</a>
393               </li></ul></div>
394 </div>
395 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
396 <td align="left"></td>
397 <td align="right"><div class="copyright-footer">Copyright &#169; 2009-2019 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam
398       Wulkiewicz, Oracle and/or its affiliates<p>
399         Distributed under the Boost Software License, Version 1.0. (See accompanying
400         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>)
401       </p>
402 </div></td>
403 </tr></table>
404 <hr>
405 <div class="spirit-nav">
406 <a accesskey="p" href="is_valid_2_with_failure_value.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_message.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
407 </div>
408 </body>
409 </html>