diff --git a/doc/html/img/index/rtree/linear.png b/doc/html/img/index/rtree/linear.png index a8cc786a0..15cbd4c3e 100644 Binary files a/doc/html/img/index/rtree/linear.png and b/doc/html/img/index/rtree/linear.png differ diff --git a/doc/index/rtree/introduction.qbk b/doc/index/rtree/introduction.qbk index 8bbd39323..fa3910f96 100644 --- a/doc/index/rtree/introduction.qbk +++ b/doc/index/rtree/introduction.qbk @@ -39,9 +39,9 @@ non-overlapping boxes. [table [[] [linear algorithm] [quadratic algorithm] [R*-tree]] [[*Example structure*] [[$img/index/rtree/linear.png]] [[$img/index/rtree/quadratic.png]] [[$img/index/rtree/rstar.png]]] -[[*1M Values inserts*] [2.11s] [2.98s] [5.49s]] -[[*100k spatial queries*] [1.52s] [0.45s] [0.17s]] -[[*100k knn queries*] [4.51s] [2.22s] [0.6s]] +[[*1M Values inserts*] [1.65s] [2.51s] [4.96s]] +[[*100k spatial queries*] [0.87s] [0.25s] [0.09s]] +[[*100k knn queries*] [3.25s] [1.41s] [0.51s]] ] [heading Implementation details] diff --git a/example/index/benchmark.cpp b/example/index/benchmark.cpp index 988dd5004..dd058de2a 100644 --- a/example/index/benchmark.cpp +++ b/example/index/benchmark.cpp @@ -9,6 +9,7 @@ #include +#define BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL #include #include @@ -47,9 +48,9 @@ int main() typedef bg::model::point P; typedef bg::model::box

B; - typedef bgi::rtree > RT; - //typedef bgi::rtree > RT; - //typedef bgi::rtree > RT; + typedef bgi::rtree > RT; + //typedef bgi::rtree > RT; + //typedef bgi::rtree > RT; std::cout << "sizeof rtree: " << sizeof(RT) << std::endl; @@ -91,6 +92,25 @@ int main() std::cout << time << " - query(B) " << queries_count << " found " << temp << '\n'; } +#ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL + { + clock_t::time_point start = clock_t::now(); + size_t temp = 0; + for (size_t i = 0 ; i < queries_count ; ++i ) + { + float x = coords[i].first; + float y = coords[i].second; + result.clear(); + std::copy(t.qbegin(bgi::intersects(B(P(x - 10, y - 10), P(x + 10, y + 10)))), + t.qend(bgi::intersects(B(P(x - 10, y - 10), P(x + 10, y + 10)))), + std::back_inserter(result)); + temp += result.size(); + } + dur_t time = clock_t::now() - start; + std::cout << time << " - query iterator(B) " << queries_count << " found " << temp << '\n'; + } +#endif + { clock_t::time_point start = clock_t::now(); size_t temp = 0; @@ -123,7 +143,7 @@ int main() { clock_t::time_point start = clock_t::now(); size_t temp = 0; - for (size_t i = 0 ; i < queries_count / 10 ; ++i ) + for (size_t i = 0 ; i < queries_count / 1 ; ++i ) { float x = coords[i].first + 100; float y = coords[i].second + 100; diff --git a/test/index/rtree/test_rtree.hpp b/test/index/rtree/test_rtree.hpp index 4e73cc846..1c6ca587a 100644 --- a/test/index/rtree/test_rtree.hpp +++ b/test/index/rtree/test_rtree.hpp @@ -642,13 +642,6 @@ void exactly_the_same_outputs(Rtree const& rtree, Range1 const& output, Range2 c // spatial query -template -void spatial_query_iterator(Iterator first, Iterator last, Container & container) -{ - for ( ; first != last ; ++first ) - container.push_back(*first); -} - template void spatial_query(Rtree & rtree, Predicates const& pred, std::vector const& expected_output) { @@ -672,8 +665,7 @@ void spatial_query(Rtree & rtree, Predicates const& pred, std::vector con #ifdef BOOST_GEOMETRY_INDEX_DETAIL_EXPERIMENTAL std::vector output3; - //std::copy(rtree.qbegin(pred), rtree.qend(pred), std::back_inserter(output3)); - spatial_query_iterator(rtree.qbegin(pred), rtree.qend(pred), output3); + std::copy(rtree.qbegin(pred), rtree.qend(pred), std::back_inserter(output3)); compare_outputs(rtree, output3, expected_output); #endif