• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>query(Predicates const &amp;, 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 &amp;)">
10<link rel="next" href="qbegin_predicates_const___.html" title="qbegin(Predicates const &amp;)">
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 &amp;, OutIter)">query(Predicates
28          const &amp;, 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">&amp;&amp;()</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">&lt;</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">&gt;</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">&amp;</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">&amp;</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">&amp;&amp;</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">&amp;&amp;</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">&amp;&amp;</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">&amp;</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">&amp;</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