From b2cf4855121e5779639674cfd080a087bcd97c50 Mon Sep 17 00:00:00 2001 From: Adam Wulkiewicz Date: Thu, 14 Feb 2013 14:33:47 +0000 Subject: [PATCH] Added Examples to the rtree docs. [SVN r82873] --- doc/html/geometry_index/r_tree.html | 6 + doc/html/geometry_index/r_tree/queries.html | 6 +- doc/html/geometry_index/r_tree/reference.html | 24 +- .../geometry_index/r_tree/rtree_examples.html | 218 ++++++++++++++++++ doc/html/index.html | 3 +- doc/imports.qbk | 1 + doc/rtree.qbk | 1 + doc/rtree/examples.qbk | 21 ++ doc/src/examples/rtree/interprocess.cpp | 4 + doc/src/examples/rtree/quick_start.cpp | 4 + 10 files changed, 272 insertions(+), 16 deletions(-) create mode 100644 doc/html/geometry_index/r_tree/rtree_examples.html create mode 100644 doc/rtree/examples.qbk diff --git a/doc/html/geometry_index/r_tree.html b/doc/html/geometry_index/r_tree.html index 4dd17eeba..582c55af6 100644 --- a/doc/html/geometry_index/r_tree.html +++ b/doc/html/geometry_index/r_tree.html @@ -64,6 +64,12 @@
Inserting query results into the other R-tree
+
Examples
+
+
Quick + start
+
Interprocess
+
Reference
boost::geometry::index::rtree
diff --git a/doc/html/geometry_index/r_tree/queries.html b/doc/html/geometry_index/r_tree/queries.html index 90cacf35b..e32d7352f 100644 --- a/doc/html/geometry_index/r_tree/queries.html +++ b/doc/html/geometry_index/r_tree/queries.html @@ -7,7 +7,7 @@ - + @@ -20,7 +20,7 @@

-PrevUpHomeNext +PrevUpHomeNext

@@ -417,7 +417,7 @@
-PrevUpHomeNext +PrevUpHomeNext
diff --git a/doc/html/geometry_index/r_tree/reference.html b/doc/html/geometry_index/r_tree/reference.html index a3868558f..893f01555 100644 --- a/doc/html/geometry_index/r_tree/reference.html +++ b/doc/html/geometry_index/r_tree/reference.html @@ -6,7 +6,7 @@ - + @@ -19,7 +19,7 @@

-PrevUpHome +PrevUpHome

@@ -47,7 +47,7 @@ boost::geometry::index::rtree

- + The R-tree spatial index.

@@ -4500,7 +4500,7 @@ The R-tree spatial index. boost::geometry::index::linear

- + Linear r-tree creation algorithm parameters.

@@ -4575,7 +4575,7 @@ Linear r-tree creation algorithm parameters. boost::geometry::index::quadratic

- + Quadratic r-tree creation algorithm parameters.

@@ -4650,7 +4650,7 @@ Quadratic r-tree creation algorithm parameters. boost::geometry::index::rstar

- + R*-tree creation algorithm parameters.

@@ -4754,7 +4754,7 @@ R*-tree creation algorithm parameters. boost::geometry::index::runtime::linear

- + Linear r-tree creation algorithm parameters.

@@ -4890,7 +4890,7 @@ Linear r-tree creation algorithm parameters. boost::geometry::index::runtime::quadratic

- + Quadratic r-tree creation algorithm parameters.

@@ -5026,7 +5026,7 @@ Quadratic r-tree creation algorithm parameters. boost::geometry::index::runtime::rstar

- + R*-tree creation algorithm parameters.

@@ -6606,7 +6606,7 @@ R*-tree creation algorithm parameters. boost::geometry::index::translator::def

- + The default translator.

@@ -6676,7 +6676,7 @@ The default translator. boost::geometry::index::translator::index

- + The index translator.

@@ -6972,7 +6972,7 @@ The index translator.
-PrevUpHome +PrevUpHome
diff --git a/doc/html/geometry_index/r_tree/rtree_examples.html b/doc/html/geometry_index/r_tree/rtree_examples.html new file mode 100644 index 000000000..cd65d78a3 --- /dev/null +++ b/doc/html/geometry_index/r_tree/rtree_examples.html @@ -0,0 +1,218 @@ + + + +Examples + + + + + + + + + + + + + + + +
Boost C++ LibrariesHomeLibrariesPeopleFAQMore
+
+
+PrevUpHomeNext +
+
+ + +
+ +

+

+
#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point_xy.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+// to store queries results
+#include <vector>
+
+// just for output
+#include <iostream>
+#include <boost/foreach.hpp>
+
+namespace bg = boost::geometry;
+namespace bgi = boost::geometry::index;
+
+int main(void)
+{
+    typedef bg::model::point<float, 2, bg::cs::cartesian> point;
+    typedef bg::model::box<point> box;
+    typedef std::pair<box, unsigned> value;
+
+    // create the rtree using default constructor
+    bgi::rtree< value, bgi::quadratic<32, 8> > rtree;
+
+    // create some values
+    for ( unsigned i = 0 ; i < 10 ; ++i )
+    {
+        // create a box
+        box b(point(i, i), point(i + 0.5f, i + 0.5f));
+        // insert new value
+        rtree.insert(std::make_pair(b, i));
+    }
+
+    // find values intersecting some area defined by a box
+    box query_box(point(0, 0), point(5, 5));
+    std::vector<value> result_s;
+    rtree.query(query_box, std::back_inserter(result_s));
+
+    // find 5 nearest values to a point
+    std::vector<value> result_n;
+    rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n));
+
+    std::cout << "spatial query result:" << std::endl;
+    BOOST_FOREACH(value const& v, result_s)
+        std::cout << bg::wkt<box>(v.first) << " - " << v.second << std::endl;
+    std::cout << "knn query result:" << std::endl;
+    BOOST_FOREACH(value const& v, result_n)
+        std::cout << bg::wkt<box>(v.first) << " - " << v.second << std::endl;
+
+    return 0;
+}
+
+

+

+
+
+ +

+

+
#include <boost/geometry.hpp>
+#include <boost/geometry/geometries/point.hpp>
+#include <boost/geometry/geometries/box.hpp>
+
+#include <boost/geometry/index/rtree.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <boost/interprocess/managed_shared_memory.hpp>
+#include <boost/interprocess/allocators/allocator.hpp>
+
+#include <vector>
+#include <string>
+#include <cstdlib> //std::system
+
+//For parent process argc == 1, for child process argc > 1
+int main(int argc, char *argv[])
+{
+    using namespace boost::interprocess;
+    namespace bg = boost::geometry;
+    namespace bgm = bg::model;
+    namespace bgi = bg::index;
+
+    typedef bgm::point<float, 2, bg::cs::cartesian> P;
+    typedef bgm::box<P> B;
+
+    typedef bgi::linear<32, 8> Par;
+    typedef bgi::translator::def<B> Tr;
+    typedef allocator<B, managed_shared_memory::segment_manager> Alloc;
+    typedef bgi::rtree<B, Par, Tr, Alloc> Rtree;
+
+    //Parent process
+    if ( argc == 1 )
+    {
+        struct shm_remove
+        {
+            shm_remove() { shared_memory_object::remove("MySharedMemory"); }
+            ~shm_remove(){ shared_memory_object::remove("MySharedMemory"); }
+        } remover;
+
+        managed_shared_memory segment(create_only, "MySharedMemory", 65536);
+
+        std::cout << "Parent: Constructing container\n";
+
+        Rtree * tree = segment.construct<Rtree>("Rtree")(Par(), Tr(), Alloc(segment.get_segment_manager()));
+
+        std::cout << "Parent: Filling container with 100 boxes\n";
+
+        for ( float i = 0 ; i < 100 ; i += 1 )
+            tree->insert(B(P(i, i), P(i+0.5f, i+0.5f)));
+
+        std::cout << "Parent: Tree content\n";
+        Rtree::bounds_type bb = tree->bounds();
+        std::cout << "[(" << bg::get<0>(bb.min_corner()) << ", " << bg::get<1>(bb.min_corner())
+                  << ")(" << bg::get<0>(bb.max_corner()) << ", " << bg::get<1>(bb.max_corner()) << ")]\n";
+
+        std::cout << "Parent: Running child process\n";
+
+        std::string s(argv[0]); s += " child ";
+        if ( 0 != std::system(s.c_str()) )
+            return 1;
+
+        if ( segment.find<Rtree>("Rtree").first )
+            return 1;
+
+        std::cout << "Parent: Container was properly destroyed by the child process\n";
+   }
+   //Child process
+   else
+   {
+      managed_shared_memory segment(open_only, "MySharedMemory");
+
+      std::cout << "Child: Searching of the container in shared memory\n";
+
+      Rtree * tree = segment.find<Rtree>("Rtree").first;
+
+      std::cout << "Child: Querying for objects intersecting box = [(45, 45)(55, 55)]\n";
+
+      std::vector<B> result;
+      unsigned k = tree->query(B(P(45, 45), P(55, 55)), std::back_inserter(result));
+
+      std::cout << "Child: Found objects:\n";
+      std::cout << k << "\n";
+      BOOST_FOREACH(B const& b, result)
+      {
+        std::cout << "[(" << bg::get<0>(b.min_corner()) << ", " << bg::get<1>(b.min_corner())
+                  << ")(" << bg::get<0>(b.max_corner()) << ", " << bg::get<1>(b.max_corner()) << ")]\n";
+      }
+      std::cout << "\n";
+
+      std::cout << "Child: Destroying container\n";
+
+      segment.destroy<Rtree>("Rtree");
+   }
+
+   return 0;
+};
+
+

+

+
+
+ + + +
+
+
+PrevUpHomeNext +
+ + diff --git a/doc/html/index.html b/doc/html/index.html index b06e49ed0..2fd9c8890 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -44,13 +44,14 @@
Creation and modification
Queries
+
Examples
Reference
- +

Last revised: February 11, 2013 at 19:05:08 GMT

Last revised: February 14, 2013 at 14:32:07 GMT


diff --git a/doc/imports.qbk b/doc/imports.qbk index f05ec3443..79c49edbd 100644 --- a/doc/imports.qbk +++ b/doc/imports.qbk @@ -9,3 +9,4 @@ =============================================================================/] [import src/examples/rtree/quick_start.cpp] +[import src/examples/rtree/interprocess.cpp] diff --git a/doc/rtree.qbk b/doc/rtree.qbk index aeb717188..67cc13ffe 100644 --- a/doc/rtree.qbk +++ b/doc/rtree.qbk @@ -14,6 +14,7 @@ [include rtree/quickstart.qbk] [include rtree/creation.qbk] [include rtree/query.qbk] +[include rtree/examples.qbk] [section:reference Reference] diff --git a/doc/rtree/examples.qbk b/doc/rtree/examples.qbk new file mode 100644 index 000000000..5691be531 --- /dev/null +++ b/doc/rtree/examples.qbk @@ -0,0 +1,21 @@ +[/============================================================================ + Boost.Geometry Index + + Copyright (c) 2011-2013 Adam Wulkiewicz. + + Use, modification and distribution is subject to the Boost Software License, + Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +=============================================================================/] + +[section:rtree_examples Examples] + +[section Quick start] +[rtree_quickstart] +[endsect] + +[section Interprocess] +[rtree_interprocess] +[endsect] + +[endsect] diff --git a/doc/src/examples/rtree/interprocess.cpp b/doc/src/examples/rtree/interprocess.cpp index be8b4a6d0..612d8c88f 100644 --- a/doc/src/examples/rtree/interprocess.cpp +++ b/doc/src/examples/rtree/interprocess.cpp @@ -6,6 +6,8 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +//[rtree_interprocess + #include #include #include @@ -103,3 +105,5 @@ int main(int argc, char *argv[]) return 0; }; + +//] \ No newline at end of file diff --git a/doc/src/examples/rtree/quick_start.cpp b/doc/src/examples/rtree/quick_start.cpp index 917fa1df7..d64d38a29 100644 --- a/doc/src/examples/rtree/quick_start.cpp +++ b/doc/src/examples/rtree/quick_start.cpp @@ -8,6 +8,8 @@ // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) +//[rtree_quickstart + //[rtree_quickstart_include #include @@ -75,3 +77,5 @@ int main(void) return 0; } + +//] \ No newline at end of file