diff --git a/doc/index/imports.qbk b/doc/index/imports.qbk index 5d81a7639..45a613f75 100644 --- a/doc/index/imports.qbk +++ b/doc/index/imports.qbk @@ -15,3 +15,4 @@ [import src/examples/rtree/value_shared_ptr.cpp] [import src/examples/rtree/value_index.cpp] [import src/examples/rtree/interprocess.cpp] +[import src/examples/rtree/mapped_file.cpp] diff --git a/doc/index/rtree/examples.qbk b/doc/index/rtree/examples.qbk index 93b4016b5..24d54d466 100644 --- a/doc/index/rtree/examples.qbk +++ b/doc/index/rtree/examples.qbk @@ -12,34 +12,50 @@ [section Quick start] [rtree_quickstart] +[h4 Expected results] +[include ../src/examples/rtree/quick_start_results.qbk] [endsect] [section Index of polygons stored in vector] [rtree_polygons_vector] +[h4 Expected results] +[include ../src/examples/rtree/polygons_vector_results.qbk] [endsect] [section Index of shared pointers to polygons] [rtree_polygons_shared_ptr] +[h4 Expected results] +[include ../src/examples/rtree/polygons_shared_ptr_results.qbk] [endsect] [section Index of iterators of a map storing variant geometries] [rtree_variants_map] +[h4 Expected results] +[include ../src/examples/rtree/variants_map_results.qbk] [endsect] [section Specializing index::indexable function object - storing shared pointers in the rtree] [rtree_value_shared_ptr] +[h4 Expected results] +[include ../src/examples/rtree/value_shared_ptr_results.qbk] [endsect] [section Using IndexableGetter function object - storing indexes of external container's elements] [rtree_value_index] +[h4 Expected results] +[include ../src/examples/rtree/value_index_results.qbk] [endsect] [section Index stored in shared memory using Boost.Interprocess] [rtree_interprocess] +[h4 Expected results] +[include ../src/examples/rtree/interprocess_results.qbk] [endsect] [section Index stored in mapped file using Boost.Interprocess] [rtree_mapped_file] +[h4 Expected results] +[include ../src/examples/rtree/mapped_file_results.qbk] [endsect] diff --git a/doc/index/rtree/query.qbk b/doc/index/rtree/query.qbk index 4f7d3ffb2..0cf80acc7 100644 --- a/doc/index/rtree/query.qbk +++ b/doc/index/rtree/query.qbk @@ -100,13 +100,16 @@ Nearest neighbours queries returns `__value__`s which are closest to some Geomet The examples of k-NN queries are presented below. 5 `__value__`s nearest to the Geometry are orange. [table -[[nearest(Point, k)] [nearest(Box, k)] [nearest(Segment, k)]] -[[[$img/index/rtree/knn_pt_box.png]] [[$img/index/rtree/knn_box_box.png]] [[$img/index/rtree/knn_seg_box.png]]] +[[nearest(Point, k)] [nearest(Box, k)] [nearest(Point, k)] [nearest(Box, k)]] +[[[$img/index/rtree/knn_pt_box.png]] [[$img/index/rtree/knn_box_box.png]] [[$img/index/rtree/rtree_pt_knn_pt.png]] [[$img/index/rtree/rtree_pt_knn_box.png]]] ] [table -[[nearest(Point, k)] [nearest(Box, k)] [nearest(Segment, k)] [nearest(Point, k)] [nearest(Box, k)] [nearest(Segment, k)]] -[[[$img/index/rtree/rtree_pt_knn_pt.png]] [[$img/index/rtree/rtree_pt_knn_box.png]] [[$img/index/rtree/rtree_pt_knn_seg.png]] - [[$img/index/rtree/rtree_seg_knn_pt.png]] [[$img/index/rtree/rtree_seg_knn_box.png]] [[$img/index/rtree/rtree_seg_knn_seg.png]]] +[[nearest(Segment, k)] + [nearest(Point, k)] [nearest(Box, k)] [nearest(Segment, k)] + [nearest(Segment, k)]] +[[[$img/index/rtree/knn_seg_box.png]] + [[$img/index/rtree/rtree_seg_knn_pt.png]] [[$img/index/rtree/rtree_seg_knn_box.png]] [[$img/index/rtree/rtree_seg_knn_seg.png]] + [[$img/index/rtree/rtree_pt_knn_seg.png]]] ] To perform the knn query one must pass the nearest predicate generated by the diff --git a/doc/index/src/examples/rtree/interprocess_results.qbk b/doc/index/src/examples/rtree/interprocess_results.qbk new file mode 100644 index 000000000..897bd523c --- /dev/null +++ b/doc/index/src/examples/rtree/interprocess_results.qbk @@ -0,0 +1,24 @@ + Parent: Constructing container + Parent: Filling container with 100 boxes + Parent: Tree content + [(0, 0)(99.5, 99.5)] + Parent: Running child process + Child: Searching of the container in shared memory + Child: Querying for objects intersecting box = [(45, 45)(55, 55)] + Child: Found objects: + 11 + [(45, 45)(45.5, 45.5)] + [(46, 46)(46.5, 46.5)] + [(47, 47)(47.5, 47.5)] + [(48, 48)(48.5, 48.5)] + [(49, 49)(49.5, 49.5)] + [(50, 50)(50.5, 50.5)] + [(51, 51)(51.5, 51.5)] + [(52, 52)(52.5, 52.5)] + [(53, 53)(53.5, 53.5)] + [(54, 54)(54.5, 54.5)] + [(55, 55)(55.5, 55.5)] + + Child: Destroying container + Parent: Container was properly destroyed by the child process + diff --git a/doc/index/src/examples/rtree/mapped_file_results.qbk b/doc/index/src/examples/rtree/mapped_file_results.qbk new file mode 100644 index 000000000..b2d73c6d0 --- /dev/null +++ b/doc/index/src/examples/rtree/mapped_file_results.qbk @@ -0,0 +1,5 @@ + 0 + 2 + 2 + 4 + diff --git a/doc/index/src/examples/rtree/polygons_shared_ptr.cpp b/doc/index/src/examples/rtree/polygons_shared_ptr.cpp index c65ba5376..0d34e23fe 100644 --- a/doc/index/src/examples/rtree/polygons_shared_ptr.cpp +++ b/doc/index/src/examples/rtree/polygons_shared_ptr.cpp @@ -69,6 +69,11 @@ int main(void) std::vector result_n; rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n)); + // note: in Boost.Geometry the WKT representation of a box is polygon + + // note: the values store the bounding boxes of polygons + // the polygons aren't used for querying but are printed + // display results std::cout << "spatial query box:" << std::endl; std::cout << bg::wkt(query_box) << std::endl; diff --git a/doc/index/src/examples/rtree/polygons_shared_ptr_results.qbk b/doc/index/src/examples/rtree/polygons_shared_ptr_results.qbk new file mode 100644 index 000000000..5280647be --- /dev/null +++ b/doc/index/src/examples/rtree/polygons_shared_ptr_results.qbk @@ -0,0 +1,29 @@ + filling index with polygons shared pointers: + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8,1 0)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2,2 1)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2,4 3)) + POLYGON((5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2,5 4)) + POLYGON((6 5,5.4 5.8,4.5 5.8,4.1 5,4.6 4.2,5.5 4.2,6 5)) + POLYGON((7 6,6.4 6.8,5.5 6.8,5.1 6,5.6 5.2,6.5 5.2,7 6)) + POLYGON((8 7,7.4 7.8,6.5 7.8,6.1 7,6.6 6.2,7.5 6.2,8 7)) + POLYGON((9 8,8.4 8.8,7.5 8.8,7.1 8,7.6 7.2,8.5 7.2,9 8)) + POLYGON((10 9,9.4 9.8,8.5 9.8,8.1 9,8.6 8.2,9.5 8.2,10 9)) + spatial query box: + POLYGON((0 0,0 5,5 5,5 0,0 0)) + spatial query result: + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8,1 0)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2,2 1)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2,4 3)) + POLYGON((5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2,5 4)) + POLYGON((6 5,5.4 5.8,4.5 5.8,4.1 5,4.6 4.2,5.5 4.2,6 5)) + knn query point: + POINT(0 0) + knn query result: + POLYGON((5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2,5 4)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2,4 3)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8,1 0)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2,2 1)) + diff --git a/doc/index/src/examples/rtree/polygons_vector.cpp b/doc/index/src/examples/rtree/polygons_vector.cpp index a8984a732..7102862c6 100644 --- a/doc/index/src/examples/rtree/polygons_vector.cpp +++ b/doc/index/src/examples/rtree/polygons_vector.cpp @@ -77,6 +77,11 @@ int main(void) std::vector result_n; rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n)); + // note: in Boost.Geometry the WKT representation of a box is polygon + + // note: the values store the bounding boxes of polygons + // the polygons aren't used for querying but are printed + // display results std::cout << "spatial query box:" << std::endl; std::cout << bg::wkt(query_box) << std::endl; diff --git a/doc/index/src/examples/rtree/polygons_vector_results.qbk b/doc/index/src/examples/rtree/polygons_vector_results.qbk new file mode 100644 index 000000000..d1dbc6041 --- /dev/null +++ b/doc/index/src/examples/rtree/polygons_vector_results.qbk @@ -0,0 +1,29 @@ + generated polygons: + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8,1 0)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2,2 1)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2,4 3)) + POLYGON((5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2,5 4)) + POLYGON((6 5,5.4 5.8,4.5 5.8,4.1 5,4.6 4.2,5.5 4.2,6 5)) + POLYGON((7 6,6.4 6.8,5.5 6.8,5.1 6,5.6 5.2,6.5 5.2,7 6)) + POLYGON((8 7,7.4 7.8,6.5 7.8,6.1 7,6.6 6.2,7.5 6.2,8 7)) + POLYGON((9 8,8.4 8.8,7.5 8.8,7.1 8,7.6 7.2,8.5 7.2,9 8)) + POLYGON((10 9,9.4 9.8,8.5 9.8,8.1 9,8.6 8.2,9.5 8.2,10 9)) + spatial query box: + POLYGON((0 0,0 5,5 5,5 0,0 0)) + spatial query result: + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8,1 0)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2,2 1)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2,4 3)) + POLYGON((5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2,5 4)) + POLYGON((6 5,5.4 5.8,4.5 5.8,4.1 5,4.6 4.2,5.5 4.2,6 5)) + knn query point: + POINT(0 0) + knn query result: + POLYGON((5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2,5 4)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2,4 3)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8,1 0)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2,2 1)) + diff --git a/doc/index/src/examples/rtree/quick_start.cpp b/doc/index/src/examples/rtree/quick_start.cpp index 80c883122..fd3834449 100644 --- a/doc/index/src/examples/rtree/quick_start.cpp +++ b/doc/index/src/examples/rtree/quick_start.cpp @@ -66,6 +66,8 @@ int main(void) rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n)); //] + // note: in Boost.Geometry WKT representation of a box is polygon + //[rtree_quickstart_output // display results std::cout << "spatial query box:" << std::endl; diff --git a/doc/index/src/examples/rtree/quick_start_results.qbk b/doc/index/src/examples/rtree/quick_start_results.qbk new file mode 100644 index 000000000..e1defd08c --- /dev/null +++ b/doc/index/src/examples/rtree/quick_start_results.qbk @@ -0,0 +1,18 @@ + spatial query box: + POLYGON((0 0,0 5,5 5,5 0,0 0)) + spatial query result: + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) - 0 + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) - 1 + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) - 2 + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) - 3 + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) - 4 + POLYGON((5 5,5 5.5,5.5 5.5,5.5 5,5 5)) - 5 + knn query point: + POINT(0 0) + knn query result: + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) - 4 + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) - 3 + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) - 2 + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) - 0 + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) - 1 + diff --git a/doc/index/src/examples/rtree/value_index.cpp b/doc/index/src/examples/rtree/value_index.cpp index 32f306909..6f245403b 100644 --- a/doc/index/src/examples/rtree/value_index.cpp +++ b/doc/index/src/examples/rtree/value_index.cpp @@ -78,6 +78,8 @@ int main(void) std::vector result_n; rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n)); + // note: in Boost.Geometry the WKT representation of a box is polygon + // display results std::cout << "spatial query box:" << std::endl; std::cout << bg::wkt(query_box) << std::endl; diff --git a/doc/index/src/examples/rtree/value_index_results.qbk b/doc/index/src/examples/rtree/value_index_results.qbk new file mode 100644 index 000000000..046da1374 --- /dev/null +++ b/doc/index/src/examples/rtree/value_index_results.qbk @@ -0,0 +1,29 @@ + generated boxes: + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) + POLYGON((5 5,5 5.5,5.5 5.5,5.5 5,5 5)) + POLYGON((6 6,6 6.5,6.5 6.5,6.5 6,6 6)) + POLYGON((7 7,7 7.5,7.5 7.5,7.5 7,7 7)) + POLYGON((8 8,8 8.5,8.5 8.5,8.5 8,8 8)) + POLYGON((9 9,9 9.5,9.5 9.5,9.5 9,9 9)) + spatial query box: + POLYGON((0 0,0 5,5 5,5 0,0 0)) + spatial query result: + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) + POLYGON((5 5,5 5.5,5.5 5.5,5.5 5,5 5)) + knn query point: + POINT(0 0) + knn query result: + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) + diff --git a/doc/index/src/examples/rtree/value_shared_ptr.cpp b/doc/index/src/examples/rtree/value_shared_ptr.cpp index e2ff55737..bf20646fe 100644 --- a/doc/index/src/examples/rtree/value_shared_ptr.cpp +++ b/doc/index/src/examples/rtree/value_shared_ptr.cpp @@ -72,6 +72,8 @@ int main(void) std::vector result_n; rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n)); + // note: in Boost.Geometry the WKT representation of a box is polygon + // display results std::cout << "spatial query box:" << std::endl; std::cout << bg::wkt(query_box) << std::endl; diff --git a/doc/index/src/examples/rtree/value_shared_ptr_results.qbk b/doc/index/src/examples/rtree/value_shared_ptr_results.qbk new file mode 100644 index 000000000..e745d7a84 --- /dev/null +++ b/doc/index/src/examples/rtree/value_shared_ptr_results.qbk @@ -0,0 +1,29 @@ + filling index with boxes shared pointers: + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) + POLYGON((5 5,5 5.5,5.5 5.5,5.5 5,5 5)) + POLYGON((6 6,6 6.5,6.5 6.5,6.5 6,6 6)) + POLYGON((7 7,7 7.5,7.5 7.5,7.5 7,7 7)) + POLYGON((8 8,8 8.5,8.5 8.5,8.5 8,8 8)) + POLYGON((9 9,9 9.5,9.5 9.5,9.5 9,9 9)) + spatial query box: + POLYGON((0 0,0 5,5 5,5 0,0 0)) + spatial query result: + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) + POLYGON((5 5,5 5.5,5.5 5.5,5.5 5,5 5)) + knn query point: + POINT(0 0) + knn query result: + POLYGON((4 4,4 4.5,4.5 4.5,4.5 4,4 4)) + POLYGON((3 3,3 3.5,3.5 3.5,3.5 3,3 3)) + POLYGON((2 2,2 2.5,2.5 2.5,2.5 2,2 2)) + POLYGON((0 0,0 0.5,0.5 0.5,0.5 0,0 0)) + POLYGON((1 1,1 1.5,1.5 1.5,1.5 1,1 1)) + diff --git a/doc/index/src/examples/rtree/variants_map.cpp b/doc/index/src/examples/rtree/variants_map.cpp index 462795002..efc043e3d 100644 --- a/doc/index/src/examples/rtree/variants_map.cpp +++ b/doc/index/src/examples/rtree/variants_map.cpp @@ -124,6 +124,11 @@ int main(void) std::vector result_n; rtree.query(bgi::nearest(point(0, 0), 5), std::back_inserter(result_n)); + // note: in Boost.Geometry the WKT representation of a box is polygon + + // note: the values store the bounding boxes of geometries + // the geometries aren't used for querying but are printed + // display results std::cout << "spatial query box:" << std::endl; std::cout << bg::wkt(query_box) << std::endl; diff --git a/doc/index/src/examples/rtree/variants_map_results.qbk b/doc/index/src/examples/rtree/variants_map_results.qbk new file mode 100644 index 000000000..e6e76b347 --- /dev/null +++ b/doc/index/src/examples/rtree/variants_map_results.qbk @@ -0,0 +1,29 @@ + generated geometries: + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2)) + LINESTRING(5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2) + POLYGON((6 5,5.4 5.8,4.5 5.8,4.1 5,4.6 4.2,5.5 4.2)) + POLYGON((7 6,6.4 6.8,5.5 6.8,5.1 6,5.6 5.2,6.5 5.2)) + POLYGON((8 7,7.4 7.8,6.5 7.8,6.1 7,6.6 6.2,7.5 6.2,8 7)) + POLYGON((9 8,8.4 8.8,7.5 8.8,7.1 8,7.6 7.2,8.5 7.2,9 8)) + POLYGON((10 9,9.4 9.8,8.5 9.8,8.1 9,8.6 8.2,9.5 8.2)) + spatial query box: + POLYGON((0 0,0 5,5 5,5 0,0 0)) + spatial query result: + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2)) + LINESTRING(5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2) + POLYGON((6 5,5.4 5.8,4.5 5.8,4.1 5,4.6 4.2,5.5 4.2)) + knn query point: + POINT(0 0) + knn query result: + LINESTRING(5 4,4.4 4.8,3.5 4.8,3.1 4,3.6 3.2,4.5 3.2) + POLYGON((4 3,3.4 3.8,2.5 3.8,2.1 3,2.6 2.2,3.5 2.2)) + POLYGON((3 2,2.4 2.8,1.5 2.8,1.1 2,1.6 1.2,2.5 1.2,3 2)) + POLYGON((1 0,0.4 0.8,-0.5 0.8,-0.9 0,-0.4 -0.8,0.5 -0.8)) + POLYGON((2 1,1.4 1.8,0.5 1.8,0.1 1,0.6 0.2,1.5 0.2)) + diff --git a/doc/reference/algorithms/touches.qbk b/doc/reference/algorithms/touches.qbk index 56e502c93..9271e4c4f 100644 --- a/doc/reference/algorithms/touches.qbk +++ b/doc/reference/algorithms/touches.qbk @@ -15,5 +15,5 @@ [heading_conformance_ogc __this_function__..Touches] [? __one_parameter__ The version with one parameter is additional and not described in the OGC standard] -[note only implemented for polygon/multi_polygon] +[note Implemented for Point/Linestring/MultiLinestring/Polygon/MultiPolygon.] diff --git a/include/boost/geometry/geometries/adapted/boost_polygon/ring.hpp b/include/boost/geometry/geometries/adapted/boost_polygon/ring.hpp index 93b21fee9..490fa45fe 100644 --- a/include/boost/geometry/geometries/adapted/boost_polygon/ring.hpp +++ b/include/boost/geometry/geometries/adapted/boost_polygon/ring.hpp @@ -69,7 +69,26 @@ struct push_back > } }; +template +struct resize > +{ + typedef boost::polygon::point_data point_type; + static inline void apply(boost::polygon::polygon_data& data, + std::size_t new_size) + { + // Boost.Polygon's polygons are not resizable. So create a temporary vector, + // resize it and set it to the original. Of course: this is not efficient. + // But there seems no other way (without using a wrapper) + std::vector temporary_vector + ( + boost::polygon::begin_points(data), + boost::polygon::end_points(data) + ); + temporary_vector.resize(new_size); + data.set(temporary_vector.begin(), temporary_vector.end()); + } +}; } // namespace traits diff --git a/test/geometries/Jamfile.v2 b/test/geometries/Jamfile.v2 index 5b809bb12..763b9b6f0 100644 --- a/test/geometries/Jamfile.v2 +++ b/test/geometries/Jamfile.v2 @@ -13,7 +13,7 @@ test-suite boost-geometry-geometries [ run adapted.cpp ] [ run boost_array_as_point.cpp ] [ run boost_fusion.cpp ] - # [ run boost_polygon.cpp ] + [ run boost_polygon.cpp ] [ run boost_range.cpp ] [ run boost_tuple.cpp ] [ run box.cpp ]