1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>query(Predicates const &, OutIter)</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="../boost__geometry__index__rtree.html" title="boost::geometry::index::rtree"> 9<link rel="prev" href="remove_convertibleorrange_const___.html" title="remove(ConvertibleOrRange const &)"> 10<link rel="next" href="qbegin_predicates_const___.html" title="qbegin(Predicates const &)"> 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="remove_convertibleorrange_const___.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost__geometry__index__rtree.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="qbegin_predicates_const___.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.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_"></a><a name="classboost_1_1geometry_1_1index_1_1rtree_1ace0ba7f3280b1074cea31b4f1bc1d7ea"></a><a class="link" href="query_predicates_const____outiter_.html" title="query(Predicates const &, OutIter)">query(Predicates 28 const &, OutIter)</a> 29</h5></div></div></div> 30<p> 31 <a class="indexterm" name="idm45635675952304"></a> 32Finds values meeting passed predicates e.g. nearest to some Point and/or 33 intersecting some Box. 34 </p> 35<h6> 36<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h0"></a> 37 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.description"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.description">Description</a> 38 </h6> 39<p> 40 This query function performs spatial and k-nearest neighbor searches. 41 It allows to pass a set of predicates. Values will be returned only if 42 all predicates are met. 43 </p> 44<p> 45 <span class="bold"><strong>Spatial predicates</strong></span> 46 </p> 47<p> 48 Spatial predicates may be generated by one of the functions listed below: 49 </p> 50<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 51<li class="listitem"> 52 <code class="literal"><a class="link" href="../group__predicates/contains_geometry_const___.html#group__predicates_1gac52a6557110425d4ece53fbd6f9ff866">boost::geometry::index::contains()</a></code>, 53 </li> 54<li class="listitem"> 55 <code class="literal"><a class="link" href="../group__predicates/covered_by_geometry_const___.html#group__predicates_1ga02dbb7cca47de0b921ef96af464d9590">boost::geometry::index::covered_by()</a></code>, 56 </li> 57<li class="listitem"> 58 <code class="literal"><a class="link" href="../group__predicates/covers_geometry_const___.html#group__predicates_1ga0e92e4a20dd19185584fe85847439108">boost::geometry::index::covers()</a></code>, 59 </li> 60<li class="listitem"> 61 <code class="literal"><a class="link" href="../group__predicates/disjoint_geometry_const___.html#group__predicates_1ga0aa114ab16f40c8caeb3338adba5d6da">boost::geometry::index::disjoint()</a></code>, 62 </li> 63<li class="listitem"> 64 <code class="literal"><a class="link" href="../group__predicates/intersects_geometry_const___.html#group__predicates_1ga78cb2ef221b951867c591ffb51b7d8c5">boost::geometry::index::intersects()</a></code>, 65 </li> 66<li class="listitem"> 67 <code class="literal"><a class="link" href="../group__predicates/overlaps_geometry_const___.html#group__predicates_1ga4a6d33e6f61ad5bff3bdee50a972d54b">boost::geometry::index::overlaps()</a></code>, 68 </li> 69<li class="listitem"> 70 <code class="literal"><a class="link" href="../group__predicates/within_geometry_const___.html#group__predicates_1gaabce901b82af2aab10ebbd0dda12f4d5">boost::geometry::index::within()</a></code>, 71 </li> 72</ul></div> 73<p> 74 It is possible to negate spatial predicates: 75 </p> 76<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 77<li class="listitem"> 78 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/contains_geometry_const___.html#group__predicates_1gac52a6557110425d4ece53fbd6f9ff866">boost::geometry::index::contains()</a></code>, 79 </li> 80<li class="listitem"> 81 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/covered_by_geometry_const___.html#group__predicates_1ga02dbb7cca47de0b921ef96af464d9590">boost::geometry::index::covered_by()</a></code>, 82 </li> 83<li class="listitem"> 84 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/covers_geometry_const___.html#group__predicates_1ga0e92e4a20dd19185584fe85847439108">boost::geometry::index::covers()</a></code>, 85 </li> 86<li class="listitem"> 87 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/disjoint_geometry_const___.html#group__predicates_1ga0aa114ab16f40c8caeb3338adba5d6da">boost::geometry::index::disjoint()</a></code>, 88 </li> 89<li class="listitem"> 90 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/intersects_geometry_const___.html#group__predicates_1ga78cb2ef221b951867c591ffb51b7d8c5">boost::geometry::index::intersects()</a></code>, 91 </li> 92<li class="listitem"> 93 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/overlaps_geometry_const___.html#group__predicates_1ga4a6d33e6f61ad5bff3bdee50a972d54b">boost::geometry::index::overlaps()</a></code>, 94 </li> 95<li class="listitem"> 96 <code class="literal"><code class="computeroutput"><span class="special">!</span> </code><a class="link" href="../group__predicates/within_geometry_const___.html#group__predicates_1gaabce901b82af2aab10ebbd0dda12f4d5">boost::geometry::index::within()</a></code> 97 </li> 98</ul></div> 99<p> 100 <span class="bold"><strong>Satisfies predicate</strong></span> 101 </p> 102<p> 103 This is a special kind of predicate which allows to pass a user-defined 104 function or function object which checks if Value should be returned 105 by the query. It's generated by: 106 </p> 107<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 108 <code class="literal"><a class="link" href="../group__predicates/satisfies_unarypredicate_const___.html#group__predicates_1ga3213772dd3e54ad03340c2ca66b4f58c">boost::geometry::index::satisfies()</a></code>. 109 </li></ul></div> 110<p> 111 <span class="bold"><strong>Nearest predicate</strong></span> 112 </p> 113<p> 114 If the nearest predicate is passed a k-nearest neighbor search will be 115 performed. This query will result in returning k values to the output 116 iterator. Only one nearest predicate may be passed to the query. It may 117 be generated by: 118 </p> 119<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"> 120 <code class="literal"><a class="link" href="../group__predicates/nearest_geometry_const____unsigned_.html#group__predicates_1ga8772d9d3e5b12b3292f7d94d47310e3e">boost::geometry::index::nearest()</a></code>. 121 </li></ul></div> 122<p> 123 <span class="bold"><strong>Connecting predicates</strong></span> 124 </p> 125<p> 126 Predicates may be passed together connected with <code class="literal"><code class="computeroutput"><span class="keyword">operator</span><span class="special">&&()</span></code></code>. 127 </p> 128<h6> 129<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h1"></a> 130 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.synopsis"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.synopsis">Synopsis</a> 131 </h6> 132<pre class="programlisting"><code class="computeroutput"><span class="keyword">template</span><span class="special"><</span></code><code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">Predicates</span></code><code class="computeroutput"><span class="special">,</span></code> <code class="computeroutput"><span class="keyword">typename</span> <span class="identifier">OutIter</span></code><code class="computeroutput"><span class="special">></span></code> 133<code class="literal"><a class="link" href="../boost__geometry__index__rtree.html#classboost_1_1geometry_1_1index_1_1rtree_1acc1f90d7b70afebc58107c523ece5cd5">size_type</a></code> <code class="computeroutput"><span class="identifier">query</span></code><code class="computeroutput"><span class="special">(</span></code><code class="computeroutput"><span class="identifier">Predicates</span> <span class="keyword">const</span> <span class="special">&</span></code> <code class="computeroutput"><span class="identifier">predicates</span></code><code class="computeroutput"><span class="special">,</span></code> <code class="computeroutput"><span class="identifier">OutIter</span></code> <code class="computeroutput"><span class="identifier">out_it</span></code><code class="computeroutput"><span class="special">)</span></code> 134</pre> 135<h6> 136<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h2"></a> 137 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.modifier_s_"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.modifier_s_">Modifier(s)</a> 138 </h6> 139<p> 140</p> 141<pre class="programlisting"><span class="keyword">const</span></pre> 142<p> 143 </p> 144<h6> 145<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h3"></a> 146 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.parameter_s_"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.parameter_s_">Parameter(s)</a> 147 </h6> 148<div class="informaltable"><table class="table"> 149<colgroup> 150<col> 151<col> 152<col> 153</colgroup> 154<thead><tr> 155<th> 156 <p> 157 Type 158 </p> 159 </th> 160<th> 161 <p> 162 Name 163 </p> 164 </th> 165<th> 166 <p> 167 Description 168 </p> 169 </th> 170</tr></thead> 171<tbody> 172<tr> 173<td> 174 <p> 175 <code class="computeroutput"><span class="identifier">Predicates</span> <span class="keyword">const</span> <span class="special">&</span></code> 176 </p> 177 </td> 178<td> 179 <p> 180 <code class="computeroutput"><span class="identifier">predicates</span></code> 181 </p> 182 </td> 183<td> 184 <p> 185 Predicates. 186 </p> 187 </td> 188</tr> 189<tr> 190<td> 191 <p> 192 <code class="computeroutput"><span class="identifier">OutIter</span></code> 193 </p> 194 </td> 195<td> 196 <p> 197 <code class="computeroutput"><span class="identifier">out_it</span></code> 198 </p> 199 </td> 200<td> 201 <p> 202 The output iterator, e.g. generated by std::back_inserter(). 203 </p> 204 </td> 205</tr> 206</tbody> 207</table></div> 208<h6> 209<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h4"></a> 210 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.returns"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.returns">Returns</a> 211 </h6> 212<p> 213 The number of values found. 214 </p> 215<h6> 216<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h5"></a> 217 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.example"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.example">Example</a> 218 </h6> 219<p> 220</p> 221<pre class="programlisting"><span class="comment">// return elements intersecting box</span> 222<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">result</span><span class="special">));</span> 223<span class="comment">// return elements intersecting poly but not within box</span> 224<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">poly</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">within</span><span class="special">(</span><span class="identifier">box</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">result</span><span class="special">));</span> 225<span class="comment">// return elements overlapping box and meeting my_fun unary predicate</span> 226<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">overlaps</span><span class="special">(</span><span class="identifier">box</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">(</span><span class="identifier">my_fun</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">result</span><span class="special">));</span> 227<span class="comment">// return 5 elements nearest to pt and elements are intersecting box</span> 228<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">nearest</span><span class="special">(</span><span class="identifier">pt</span><span class="special">,</span> <span class="number">5</span><span class="special">)</span> <span class="special">&&</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">back_inserter</span><span class="special">(</span><span class="identifier">result</span><span class="special">));</span> 229 230<span class="comment">// For each found value do_something (it is a type of function object)</span> 231<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box</span><span class="special">),</span> 232 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_function_output_iterator</span><span class="special">(</span><span class="identifier">do_something</span><span class="special">()));</span> 233 234<span class="comment">// For each value stored in the rtree do_something</span> 235<span class="comment">// always_true is a type of function object always returning true</span> 236<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">satisfies</span><span class="special">(</span><span class="identifier">always_true</span><span class="special">()),</span> 237 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_function_output_iterator</span><span class="special">(</span><span class="identifier">do_something</span><span class="special">()));</span> 238 239<span class="comment">// C++11 (lambda expression)</span> 240<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box</span><span class="special">),</span> 241 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_function_output_iterator</span><span class="special">([](</span><span class="identifier">value_type</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">val</span><span class="special">){</span> 242 <span class="comment">// do something</span> 243 <span class="special">}));</span> 244 245<span class="comment">// C++14 (generic lambda expression)</span> 246<span class="identifier">tree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">bgi</span><span class="special">::</span><span class="identifier">intersects</span><span class="special">(</span><span class="identifier">box</span><span class="special">),</span> 247 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">make_function_output_iterator</span><span class="special">([](</span><span class="keyword">auto</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">val</span><span class="special">){</span> 248 <span class="comment">// do something</span> 249 <span class="special">}));</span> 250</pre> 251<p> 252 </p> 253<h6> 254<a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.h6"></a> 255 <span class="phrase"><a name="geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.throws"></a></span><a class="link" href="query_predicates_const____outiter_.html#geometry.reference.spatial_indexes.boost__geometry__index__rtree.query_predicates_const____outiter_.throws">Throws</a> 256 </h6> 257<p> 258 If Value copy constructor or copy assignment throws. If predicates copy 259 throws. 260 </p> 261<div class="warning"><table border="0" summary="Warning"> 262<tr> 263<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../../../../../../doc/src/images/warning.png"></td> 264<th align="left">Warning</th> 265</tr> 266<tr><td align="left" valign="top"><p> 267 Only one <code class="literal"><a class="link" href="../group__predicates/nearest_geometry_const____unsigned_.html#group__predicates_1ga8772d9d3e5b12b3292f7d94d47310e3e">nearest()</a></code> 268 predicate may be passed to the query. Passing more of them results 269 in compile-time error. 270 </p></td></tr> 271</table></div> 272</div> 273<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 274<td align="left"></td> 275<td align="right"><div class="copyright-footer">Copyright © 2009-2019 Barend Gehrels, Bruno Lalande, Mateusz Loskot, Adam 276 Wulkiewicz, Oracle and/or its affiliates<p> 277 Distributed under the Boost Software License, Version 1.0. (See accompanying 278 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>) 279 </p> 280</div></td> 281</tr></table> 282<hr> 283<div class="spirit-nav"> 284<a accesskey="p" href="remove_convertibleorrange_const___.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../boost__geometry__index__rtree.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="qbegin_predicates_const___.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a> 285</div> 286</body> 287</html> 288