|
|
|
|
@@ -3,7 +3,7 @@
|
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
|
|
|
|
|
<title>Examples</title>
|
|
|
|
|
<link rel="stylesheet" href="http://www.boost.org/doc/libs/release/doc/src/boostbook.css" type="text/css">
|
|
|
|
|
<meta name="generator" content="DocBook XSL Stylesheets V1.77.1">
|
|
|
|
|
<meta name="generator" content="DocBook XSL Stylesheets V1.76.1">
|
|
|
|
|
<link rel="home" href="../../index.html" title="Chapter 1. Geometry Index">
|
|
|
|
|
<link rel="up" href="../r_tree.html" title="R-tree">
|
|
|
|
|
<link rel="prev" href="queries.html" title="Queries">
|
|
|
|
|
@@ -35,6 +35,10 @@
|
|
|
|
|
of shared pointers to polygons</a></span></dt>
|
|
|
|
|
<dt><span class="section"><a href="rtree_examples.html#geometry_index.r_tree.rtree_examples.index_of_iterators_of_a_map_storing_variant_geometries">Index
|
|
|
|
|
of iterators of a map storing variant geometries</a></span></dt>
|
|
|
|
|
<dt><span class="section"><a href="rtree_examples.html#geometry_index.r_tree.rtree_examples.specializing_translator___storing_shared_pointers_in_the_rtree">Specializing
|
|
|
|
|
Translator - storing shared pointers in the rtree</a></span></dt>
|
|
|
|
|
<dt><span class="section"><a href="rtree_examples.html#geometry_index.r_tree.rtree_examples.using_translator_object___storing_indexes_of_external_container_s_elements">Using
|
|
|
|
|
Translator object - storing indexes of external container's elements</a></span></dt>
|
|
|
|
|
<dt><span class="section"><a href="rtree_examples.html#geometry_index.r_tree.rtree_examples.index_stored_in_shared_memory_using_boost_interprocess">Index
|
|
|
|
|
stored in shared memory using Boost.Interprocess</a></span></dt>
|
|
|
|
|
</dl></div>
|
|
|
|
|
@@ -427,6 +431,190 @@
|
|
|
|
|
</div>
|
|
|
|
|
<div class="section">
|
|
|
|
|
<div class="titlepage"><div><div><h4 class="title">
|
|
|
|
|
<a name="geometry_index.r_tree.rtree_examples.specializing_translator___storing_shared_pointers_in_the_rtree"></a><a class="link" href="rtree_examples.html#geometry_index.r_tree.rtree_examples.specializing_translator___storing_shared_pointers_in_the_rtree" title="Specializing Translator - storing shared pointers in the rtree">Specializing
|
|
|
|
|
Translator - storing shared pointers in the rtree</a>
|
|
|
|
|
</h4></div></div></div>
|
|
|
|
|
<p>
|
|
|
|
|
</p>
|
|
|
|
|
<pre class="programlisting"><span class="preprocessor">#include</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">hpp</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</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">geometries</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</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">geometries</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
|
|
|
|
|
<span class="preprocessor">#include</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">index</span><span class="special">/</span><span class="identifier">rtree</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cmath</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foreach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">shared_ptr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">namespace</span> <span class="identifier">bg</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="keyword">namespace</span> <span class="identifier">bgi</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">index</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">geometry</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">index</span> <span class="special">{</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Box</span><span class="special">></span>
|
|
|
|
|
<span class="keyword">struct</span> <span class="identifier">translator</span><span class="special"><</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">Box</span><span class="special">></span> <span class="special">></span>
|
|
|
|
|
<span class="special">{</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">Box</span><span class="special">></span> <span class="identifier">V</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">Box</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">result_type</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">V</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="special">*</span><span class="identifier">v</span><span class="special">;</span> <span class="special">}</span>
|
|
|
|
|
<span class="keyword">bool</span> <span class="identifier">equals</span><span class="special">(</span><span class="identifier">V</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v1</span><span class="special">,</span> <span class="identifier">V</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v2</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">v1</span> <span class="special">==</span> <span class="identifier">v2</span><span class="special">;</span> <span class="special">}</span>
|
|
|
|
|
<span class="special">};</span>
|
|
|
|
|
|
|
|
|
|
<span class="special">}}}</span> <span class="comment">// namespace boost::geometry::index</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span>
|
|
|
|
|
<span class="special">{</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special"><</span><span class="keyword">float</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">></span> <span class="identifier">point</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special"><</span><span class="identifier">point</span><span class="special">></span> <span class="identifier">box</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">shared_ptr</span><span class="special"><</span><span class="identifier">box</span><span class="special">></span> <span class="identifier">shp</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">shp</span> <span class="identifier">value</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// create the rtree using default constructor</span>
|
|
|
|
|
<span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special"><</span> <span class="identifier">value</span><span class="special">,</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">linear</span><span class="special"><</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">></span> <span class="special">></span> <span class="identifier">rtree</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"filling index with boxes shared pointers:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// create some polygons and fill the spatial index</span>
|
|
|
|
|
<span class="keyword">for</span> <span class="special">(</span> <span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span> <span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">10</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span>
|
|
|
|
|
<span class="special">{</span>
|
|
|
|
|
<span class="comment">// create a box</span>
|
|
|
|
|
<span class="identifier">shp</span> <span class="identifier">b</span><span class="special">(</span><span class="keyword">new</span> <span class="identifier">box</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">i</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="identifier">i</span><span class="special">+</span><span class="number">0.5f</span><span class="special">,</span> <span class="identifier">i</span><span class="special">+</span><span class="number">0.5f</span><span class="special">)));</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// display new box</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(*</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// insert new value</span>
|
|
|
|
|
<span class="identifier">rtree</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">b</span><span class="special">);</span>
|
|
|
|
|
<span class="special">}</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// find values intersecting some area defined by a box</span>
|
|
|
|
|
<span class="identifier">box</span> <span class="identifier">query_box</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">5</span><span class="special">));</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">value</span><span class="special">></span> <span class="identifier">result_s</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">rtree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">query_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_s</span><span class="special">));</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// find 5 nearest values to a point</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">value</span><span class="special">></span> <span class="identifier">result_n</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">rtree</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">point</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">),</span> <span class="number">5</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_n</span><span class="special">));</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// display results</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"spatial query box:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"spatial query result:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">value</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">result_s</span><span class="special">)</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(*</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"knn query point:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">point</span><span class="special">>(</span><span class="identifier">point</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"knn query result:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">value</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">v</span><span class="special">,</span> <span class="identifier">result_n</span><span class="special">)</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(*</span><span class="identifier">v</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
|
|
|
|
|
<span class="special">}</span>
|
|
|
|
|
</pre>
|
|
|
|
|
<p>
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="section">
|
|
|
|
|
<div class="titlepage"><div><div><h4 class="title">
|
|
|
|
|
<a name="geometry_index.r_tree.rtree_examples.using_translator_object___storing_indexes_of_external_container_s_elements"></a><a class="link" href="rtree_examples.html#geometry_index.r_tree.rtree_examples.using_translator_object___storing_indexes_of_external_container_s_elements" title="Using Translator object - storing indexes of external container's elements">Using
|
|
|
|
|
Translator object - storing indexes of external container's elements</a>
|
|
|
|
|
</h4></div></div></div>
|
|
|
|
|
<p>
|
|
|
|
|
</p>
|
|
|
|
|
<pre class="programlisting"><span class="preprocessor">#include</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">hpp</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</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">geometries</span><span class="special">/</span><span class="identifier">point</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</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">geometries</span><span class="special">/</span><span class="identifier">box</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
|
|
|
|
|
<span class="preprocessor">#include</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">index</span><span class="special">/</span><span class="identifier">rtree</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cmath</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">vector</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
|
|
|
|
|
<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foreach</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">namespace</span> <span class="identifier">bg</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="keyword">namespace</span> <span class="identifier">bgi</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">index</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Container</span><span class="special">></span>
|
|
|
|
|
<span class="keyword">class</span> <span class="identifier">index_translator</span>
|
|
|
|
|
<span class="special">{</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">Container</span><span class="special">::</span><span class="identifier">size_type</span> <span class="identifier">size_t</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="keyword">typename</span> <span class="identifier">Container</span><span class="special">::</span><span class="identifier">const_reference</span> <span class="identifier">cref</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">Container</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">container</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">public</span><span class="special">:</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">cref</span> <span class="identifier">result_type</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">explicit</span> <span class="identifier">index_translator</span><span class="special">(</span><span class="identifier">Container</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">c</span><span class="special">)</span> <span class="special">:</span> <span class="identifier">container</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span> <span class="special">{}</span>
|
|
|
|
|
<span class="identifier">result_type</span> <span class="keyword">operator</span><span class="special">()(</span><span class="identifier">size_t</span> <span class="identifier">i</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">container</span><span class="special">[</span><span class="identifier">i</span><span class="special">];</span> <span class="special">}</span>
|
|
|
|
|
<span class="keyword">bool</span> <span class="identifier">equals</span><span class="special">(</span><span class="identifier">size_t</span> <span class="identifier">i1</span><span class="special">,</span> <span class="identifier">size_t</span> <span class="identifier">i2</span><span class="special">)</span> <span class="keyword">const</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">i1</span> <span class="special">==</span> <span class="identifier">i2</span><span class="special">;</span> <span class="special">}</span>
|
|
|
|
|
<span class="special">};</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">int</span> <span class="identifier">main</span><span class="special">(</span><span class="keyword">void</span><span class="special">)</span>
|
|
|
|
|
<span class="special">{</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">point</span><span class="special"><</span><span class="keyword">float</span><span class="special">,</span> <span class="number">2</span><span class="special">,</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">cs</span><span class="special">::</span><span class="identifier">cartesian</span><span class="special">></span> <span class="identifier">point</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">model</span><span class="special">::</span><span class="identifier">box</span><span class="special"><</span><span class="identifier">point</span><span class="special">></span> <span class="identifier">box</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">box</span><span class="special">>::</span><span class="identifier">size_type</span> <span class="identifier">value</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rstar</span><span class="special"><</span><span class="number">16</span><span class="special">,</span> <span class="number">4</span><span class="special">></span> <span class="identifier">parameters</span><span class="special">;</span>
|
|
|
|
|
<span class="keyword">typedef</span> <span class="identifier">index_translator</span><span class="special"><</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">box</span><span class="special">></span> <span class="special">></span> <span class="identifier">translator</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// boxes</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">box</span><span class="special">></span> <span class="identifier">boxes</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// create some boxes</span>
|
|
|
|
|
<span class="keyword">for</span> <span class="special">(</span> <span class="keyword">unsigned</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span> <span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="number">10</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span>
|
|
|
|
|
<span class="special">{</span>
|
|
|
|
|
<span class="comment">// add a box</span>
|
|
|
|
|
<span class="identifier">boxes</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">box</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="identifier">i</span><span class="special">,</span> <span class="identifier">i</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="identifier">i</span><span class="special">+</span><span class="number">0.5f</span><span class="special">,</span> <span class="identifier">i</span><span class="special">+</span><span class="number">0.5f</span><span class="special">)));</span>
|
|
|
|
|
<span class="special">}</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// display boxes</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"generated boxes:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">box</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">b</span><span class="special">,</span> <span class="identifier">boxes</span><span class="special">)</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(</span><span class="identifier">b</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// create the rtree</span>
|
|
|
|
|
<span class="identifier">parameters</span> <span class="identifier">params</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">translator</span> <span class="identifier">tr</span><span class="special">(</span><span class="identifier">boxes</span><span class="special">);</span>
|
|
|
|
|
<span class="identifier">bgi</span><span class="special">::</span><span class="identifier">rtree</span><span class="special"><</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">parameters</span><span class="special">,</span> <span class="identifier">translator</span><span class="special">></span> <span class="identifier">rtree</span><span class="special">(</span><span class="identifier">params</span><span class="special">,</span> <span class="identifier">tr</span><span class="special">);</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// fill the spatial index</span>
|
|
|
|
|
<span class="keyword">for</span> <span class="special">(</span> <span class="identifier">size_t</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span> <span class="special">;</span> <span class="identifier">i</span> <span class="special"><</span> <span class="identifier">boxes</span><span class="special">.</span><span class="identifier">size</span><span class="special">()</span> <span class="special">;</span> <span class="special">++</span><span class="identifier">i</span> <span class="special">)</span>
|
|
|
|
|
<span class="identifier">rtree</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="identifier">i</span><span class="special">);</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// find values intersecting some area defined by a box</span>
|
|
|
|
|
<span class="identifier">box</span> <span class="identifier">query_box</span><span class="special">(</span><span class="identifier">point</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">),</span> <span class="identifier">point</span><span class="special">(</span><span class="number">5</span><span class="special">,</span> <span class="number">5</span><span class="special">));</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">value</span><span class="special">></span> <span class="identifier">result_s</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">rtree</span><span class="special">.</span><span class="identifier">query</span><span class="special">(</span><span class="identifier">query_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_s</span><span class="special">));</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// find 5 nearest values to a point</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">vector</span><span class="special"><</span><span class="identifier">value</span><span class="special">></span> <span class="identifier">result_n</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">rtree</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">point</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">),</span> <span class="number">5</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_n</span><span class="special">));</span>
|
|
|
|
|
|
|
|
|
|
<span class="comment">// display results</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"spatial query box:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(</span><span class="identifier">query_box</span><span class="special">)</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"spatial query result:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">value</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">result_s</span><span class="special">)</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(</span><span class="identifier">boxes</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"knn query point:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">point</span><span class="special">>(</span><span class="identifier">point</span><span class="special">(</span><span class="number">0</span><span class="special">,</span> <span class="number">0</span><span class="special">))</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"knn query result:"</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
<span class="identifier">BOOST_FOREACH</span><span class="special">(</span><span class="identifier">value</span> <span class="identifier">i</span><span class="special">,</span> <span class="identifier">result_n</span><span class="special">)</span>
|
|
|
|
|
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">bg</span><span class="special">::</span><span class="identifier">wkt</span><span class="special"><</span><span class="identifier">box</span><span class="special">>(</span><span class="identifier">boxes</span><span class="special">[</span><span class="identifier">i</span><span class="special">])</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
|
|
|
|
|
|
|
|
|
|
<span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
|
|
|
|
|
<span class="special">}</span>
|
|
|
|
|
</pre>
|
|
|
|
|
<p>
|
|
|
|
|
</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="section">
|
|
|
|
|
<div class="titlepage"><div><div><h4 class="title">
|
|
|
|
|
<a name="geometry_index.r_tree.rtree_examples.index_stored_in_shared_memory_using_boost_interprocess"></a><a class="link" href="rtree_examples.html#geometry_index.r_tree.rtree_examples.index_stored_in_shared_memory_using_boost_interprocess" title="Index stored in shared memory using Boost.Interprocess">Index
|
|
|
|
|
stored in shared memory using Boost.Interprocess</a>
|
|
|
|
|
</h4></div></div></div>
|
|
|
|
|
|